【发布时间】: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
在下面的代码中
var x = 1;
(function () {
console.log(x);
var x = 2;
}());
为什么console.log(x)时,x是未定义的?
【问题讨论】:
标签: javascript
变量提升。实际代码是这样执行的。
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 x=1; function whatever() {console.log(x);} 有效吗?
因为编译器,即使你在代码下面启动一个var,编译器也会把它发送到顶部,就像var x;一样,所以它在运行console.log之前首先启动为未定义的“x”,这就是为什么初始化您将在函数中首先使用的所有变量是一个很好的做法,所以这些错误不会发生。
【讨论】: