Open jirengu opened 7 years ago
var x = 10; -> var x ; x = 10;
undefined
11
var
在 if
里面,会提前到块级作用域的开始,相当于:
var x;
var y = 10;
if (!(x in window)) {
x = 10;
} else {
++y;
}
alert(x);
alert(y);
输出undefined和11,其中x的值为undefined,y的值为11。
原因:变量提升,对式子进行转换后得出:
var y;
var x;
y = 10;
if (!(x in window)) {
x = 10;
} else {
++y;
}
alert(x);
alert(y);`
然后因为,此时的x在全局环境被声明,所以!(x in window)
为false,不执行x的赋值,然后执行++y,得出y值为11,x值为undefined;
因为js没有块级作用域,以及存在变量提升。 这里补充另一种情况:函数的变量提升:
foo(); // foo
bar(); //bar is not defined
function foo() {
console.log('foo');
}
bar = function () {
console.log('bar');
};
学习到了。还以为没有满足条件var 不会声明提前了。get
以下代码会不会报错,如果不报错输出什么,为什么