字符串引用在javascript闭包中的行为很奇怪
string references behaving strangley in javascript closure
我想让下面的代码打印"cat",但是它打印的却是"bat"
var a = "cat";
x = function(){
var b = a;
console.log(b);
}
a = "bat";
x();
我怎么做才能得到内部函数能按我想要的方式工作吗?有没有办法在不分配更多空间的情况下做到这一点?
这是因为变量a在函数x执行之前被重新赋值给"cat"。因此,在调用x()之前,变量b将是未声明的。在声明过程中,a的值为"bat"
下面的代码段
x = function(){
var b = a;
console.log(b);
}
你刚刚定义了一个匿名函数,它绑定了一个外部分数变量a
,结果是a closure
。所以它受外部作用域的约束。所以在
x
函数执行时x();
a在全局作用域中的值是"bat"
,导致匿名函数返回"bat"
。
这样可能会更清楚
var a = "cat";
x = function(){
var b = a;
alert(b);
}
a = "bat";
x();//alerts bat
a = "wow";
x();//alerts wow
a = "im bound to the outer scope";
x();//alerts im bound to the outer scope
这修复了我遇到的问题:
var a = "cat";
function copyCatBuilder(animal){
return function(){ console.log(animal)};
}
x = copyCatBuilder(a);
a = "bat";
x();
程序现在输出"cat"
相关文章:
- 为什么我可以引用Javascript中尚未定义的变量
- 有没有一种方法可以通过只引用JavaScript来执行代码
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- 引用Javascript中的索引集合
- 通过引用Javascript中的另一个函数来传递对象方法
- 如何从onclick字符串中引用javascript对象函数
- 在jquery事件中引用javascript对象
- 通过动态创建数组名称在单击函数中引用 javascript 数组
- 引用javascript嵌入资源,但intellisense没有'我什么也不展示
- 对象属性引用JavaScript中的其他对象属性
- 引用JavaScript变量
- 如何通过引用(javascript)从数组中删除对象
- 我的无引用 JavaScript 对象存在在哪里以及存在多长时间
- 引用javascript对象内的另一个字段
- 如何在启动之前引用javascript窗口元素
- Google Drive是否不再允许从其他网站引用JavaScript文件
- XUL不引用javascript文件
- 我们可以在浏览器会话中跨网页引用 JavaScript 变量吗?
- 如何查找哪些ASPX文件实际引用JavaScript文件
- 从 Jasmine 测试中引用 JavaScript 文件