【问题标题】:Why is x undefined in inner scope? [duplicate]为什么 x 在内部范围内未定义? [复制]
【发布时间】:2016-01-13 01:00:24
【问题描述】:

在下面的代码中

var x = 1;

(function () {
  console.log(x);
  var x = 2;
}());

为什么console.log(x)时,x是未定义的?

【问题讨论】:

  • @WolfOfWallstreet 所以你想要在你之后 console.log(x);得到2号对吗?

标签: javascript


【解决方案1】:

变量提升。实际代码是这样执行的。

var x = 1;
(function() {
    var x; // x = undefined
    console.log(x);
    x = 2;
})();

编辑:根据李斯特先生的建议,关于变量提升的一些内容。来自 MDN (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var):

“变量声明,无论它们出现在哪里,都会在执行任何代码之前进行处理。用 var 声明的变量的范围是它当前的执行上下文,它要么是封闭函数,要么是在任何函数之外声明的变量,是全局的。 "

【讨论】:

  • 你能向 OP 解释一下什么是变量提升以及为什么var x=1; function whatever() {console.log(x);} 有效吗?
  • 我知道他们可以在其他地方查找它,但如果这里的答案是独立的,那就太好了。
  • @TBWill4321 当我这样做的时候这个代码。它给出了未定义的!
  • @EndritShala 是的,问题不是“我如何制作这段代码......”,它要求解释为什么代码会以它的方式运行。我发布的代码是相同的,只是显示变量提升的扩展版本。
  • @TbWill4321 哦,好吧,我不明白这个问题,因为我是英语新手,所以我不明白他问他需要进入 2 号控制台。
【解决方案2】:

因为编译器,即使你在代码下面启动一个var,编译器也会把它发送到顶部,就像var x;一样,所以它在运行console.log之前首先启动为未定义的“x”,这就是为什么初始化您将在函数中首先使用的所有变量是一个很好的做法,所以这些错误不会发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多