- 48
- 0
var name = "The Window";
var getNameFunc= {
name: "My Object",
getNameFunc: function() {
return function() {
return this.name;
};
}
};
alert(object.getNameFunc()()); //"The Window"(在非严格模式下)
在高级程序设计的第7章,7.2.2关于this对象中,有几句话实在是不太明白:
以上代码先创建了一个全局变量 name,又创建了一个包含 name 属性的对象。这个对象还包含一个方法——getNameFunc(),它返回一个匿名函数,而匿名函数又返回 this.name。由于 getNameFunc()返回一个函数,因此调用 object.getNameFunc()()就会立即调用它返回的函数,结果就是返回一个字符串。然而,这个例子返回的字符串是"The Window",即全局 name 变量的值。为什么匿名函数没有取得其包含作用域(或外部作用域)的 this 对象呢?
前面曾经提到过,每个函数在被调用时都会自动取得两个特殊变量: this 和 arguments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量。
1.只会搜索到其活动对象??? 不是有个作用域链吗?匿名活动对象在最下面,在匿名对象中找不到,那就去上面的活动对象去找咯?getNameFunc中找不到就去object去找咯。。。不就找到了吗
2.因此永远不可能直接访问外部函数中的这两个变量???是什么意思?外部函数是指哪个?
- 共 0 条
- 全部回答
-
低吟ぃ浅唱 普通会员 1楼
在JavaScript中,闭包是一种特殊的函数,它可以访问并修改外部函数作用域中的变量。这是因为外部函数会捕获并存储它定义时的上下文环境。
以下是一个简单的例子,展示了如何使用闭包来创建一个函数,这个函数可以访问并修改它外部函数的变量:
```javascript function outerFunction() { var outerVariable = "I am outside the function";
function innerFunction() { console.log(outerVariable); }
return innerFunction; }
var innerFunction = outerFunction(); innerFunction(); // 输出 "I am outside the function" ```
在这个例子中,
outerFunction返回了一个内部函数innerFunction。由于innerFunction是在outerFunction作用域中定义的,所以它可以访问并修改outerFunction的作用域中的outerVariable。这就是闭包的使用,它可以帮助我们在函数中创建和修改变量,从而实现一些高级的函数特性。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

