【问题标题】:What is the value of result?结果的价值是什么?
【发布时间】:2017-10-10 08:56:28
【问题描述】:

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

var x = 10;

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

outerfunc();

var answer = x;

【问题讨论】:

  • 你可以试试...

标签: scope closures


【解决方案1】:

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

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

【讨论】:

  • 好的,但是一旦调用了 innerfunc,为什么 innerfunc 不开始在外部范围中寻找最近的 x,在这种情况下 x = 20 ?
  • 因为通过使用innerfunc 中的var 语句,您创建了一个名为x 的新变量,它位于innerfunc 的范围内。代码无需在 innerfunc 之外搜索。简而言之,您创建了两个完全独立的变量。您看到的混乱是因为您将它们命名为相同。按照建议删除单词 var,然后 innerfunc 应该找到 x 的外部范围实例。
【解决方案2】:

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

function innerfunc () {
  var x = x + 20; // here there is no global x. so it is NaN
  return x;
}

看到这个

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2022-08-15
    • 1970-01-01
    • 2019-09-27
    • 2017-08-19
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多