var x = 1;
(function() {
console.log(x);
var x = 2;
}());
代码为什么说CONSOLE.LOG(X)时,x是未定义的?
var x = 1;
(function() {
console.log(x);
var x = 2;
}());
代码为什么说CONSOLE.LOG(X)时,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声明的变量的作用域是当前的执行上下文,它可能是包含函数或变量在任何职能之外宣布,全球。“
你可以向OP解释什么变量提升是什么,为什么'var x = 1;函数whatever(){console.log(x);}'工作吗? –
我知道他们可以在其他地方查看它,但如果这里的答案是独立的,那么它会很好。 –
@ TBWill4321这个代码当我做它。它给未定义! –
由于编译器的原因,即使您在代码下面启动了一个var,编译器也会将它发送到顶端,就像var x;
,因此它在运行console.log之前首先启动为未定义的“x”,这就是为什么这是一种很好的练习,可以启动你将要在函数中使用的所有变量,所以这些错误不会发生。
@WolfOfWallstreet所以你想在你console.log(x);获得2号的权利? –