为什么x在内部范围内未定义?
这个问题在这里已经有了答案:
变量提升。 实际的代码是这样执行的。
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声明的变量范围是其当前的执行上下文,它可以是包含函数,或者对于在任何函数外部声明的变量,全局变量。
由于编译器的原因,即使您在代码下面启动了一个var,编译器也会将它发送到顶端,就像var x;
,所以它在运行console.log之前首先启动为未定义的“x”,这就是为什么这样一个好习惯来启动你将要在函数中使用第一个东西的所有变量,所以这些错误不会发生。