为什么在内部范围内未定义x?

时间:2015-10-14 19:18:25

标签: javascript

在下面的代码中

var x = 1;

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

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

2 个答案:

答案 0 :(得分:9)

可变吊装。实际代码就像这样执行。

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声明的变量的范围是它的当前执行上下文,它是封闭函数,或者对于在任何函数外部声明的变量,是全局的。"

答案 1 :(得分:3)

由于编译器,即使你在代码下面启动var,编译器也会将它发送到顶部,就像var x;一样,所以它首先启动为未定义的" x"在运行console.log之前,为什么这是一个很好的做法来启动所有vars你将在函数中使用第一个东西,所以这些错误不会发生。