Javascript关闭或赋值运算符未按预期工作

时间:2016-07-22 07:33:53

标签: javascript closures

var xu = 12;

var f = function () {
  var b = xu;
  return function() {
    console.log(b);
  }
}

调用f()()在控制台上提供12

然后我写下面的陈述。

xu = 14; 
f()(); 

据我所知,函数调用应该打印12。我们不会在任何地方更改b的值。

但输出为14。这是否意味着赋值运算符传递变量的引用而不仅仅是值?

编辑:同样,但如果我不使用闭包,则赋值运算符不会分配引用。困惑!

3 个答案:

答案 0 :(得分:2)

我希望以下代码可以解释:

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,则通过闭包

将旧值绑定

答案 1 :(得分:2)

当您运行f()时,它每次都会b重新分配xu

答案 2 :(得分:0)

当您运行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'