结果的价值是什么?

时间:2017-10-10 08:56:28

标签: scope closures

我想知道在调用outerfunc之后回答的值是什么。特别感兴趣的是它背后的推理(例如,为什么innerfunc的返回值没有替换全局范围中存储在var x中的值?)谢谢!

var x = 10;

function outerfunc () {
  x = 20;
  function innerfunc () {
    var x = x + 20;
    return x;
  }
  innerfunc();
}

outerfunc();

var answer = x;

2 个答案:

答案 0 :(得分:1)

为什么innerfunc的返回值没有替换全局范围中存储在var x中的值?

因为您在innerfunc中创建了一个名为x的新var。尝试从行var x = x + 20;

中删除var

答案 1 :(得分:0)

当声明一个与全局变量同名的局部变量时,全局变量在该函数中变得不可见。

var x = 10;

function outerfunc () {
x = 20;
function innerfunc () {
  var x = x + 20;
  alert("value of x in innerFun " + x);
}
innerfunc();
}
outerfunc();
alert("global value of x is " + x);

见这个



{{1}}