下面这段代码执行后是 undefined
<script type="text/javascript">
if (! 'a' in window) {
var a = 123;
}
console.log(a);
</script>
说明 'a' in window
为 true
, 可是 a 在什么时候声明的呢?请教大家,谢谢!
我又把代码改成:
<script type="text/javascript">
if (! 'a' in window) {
a = 123;
}
console.log(a);
</script>
结果a is not defined
。 既然 a
已经声明,为什么会报这个错误呢?
先说变量提升吧
这段代码无论是否进入
if
的代码块内,a 都是存在的因为在 JavaScript 执行时,所有通过
var
定义的变量以及声明式函数都会被提升到当前作用域的顶部而通过
var
创建的变量是没有块级作用域的,所以会提升到当前函数作用域的顶部在全局作用域定义的变量都是 window 的属性
所以这段代码实际上执行的时候是这样的顺序
定义了
a
,但没有赋值,自然输出了undefined
关于其中
! 'a' in window
其实是先对'a'
字符串执行非,得到了false
,window
里没有window.false
这个属性,返回了false
,没有进入 if 代码块。具体可尝试以下例子
第二个问题
看懂了上面这个就很简单了,没用
var
定义(不存在提升),又没进if
,导致没有定义 a,报错。