繁体   English   中英

JavaScript闭包或赋值运算符未按预期工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM