[英]Javascript Closure or assignment operator not working as expected
var xu = 12;
var f = function () {
var b = xu;
return function() {
console.log(b);
}
}
调用f()()
在控制台上给出12
。
然后,我写以下语句。
xu = 14;
f()();
据我所知,函数调用应该打印12
。 我们不会在任何地方更改b
的值。
但是输出是14
。 这是否意味着赋值运算符正在传递变量的引用,而不仅仅是传递值?
编辑:同样,但是如果我不使用闭包,赋值运算符不会分配引用。 困惑!
我希望下面的代码能解释一下:
var xu = 12;
var f = function () {
var b = xu;
return function() {
console.log(b);
}
}
b = f()
b(); // 12
xu =14
b() // 12
f()() // 14
f()() // 14
您再次调用该函数,它将获得xu
的当前值。 就像b() // 12
您具有通过闭包绑定的旧值
好吧,当您运行f()
时,每次都会将b
xu
的值
运行f()
,将b
重新分配给xu
。 除非你这样做
var xu = 12;
var f = function () {
var b = xu;
return function() {
console.log(b);
}
}
f()(); // prints '12'
var c = f();
xu = 13;
c(); // prints '12'
f()(); // prints '13'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.