关于变量名提升的问题?

下面这段代码执行后是 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 已经声明,为什么会报这个错误呢?

波斯汪
浏览 557回答 1
1回答

12345678_0001

先说变量提升吧if (! 'a' in window) {&nbsp; var a = 123;}console.log(a);这段代码无论是否进入&nbsp;if&nbsp;的代码块内,a 都是存在的因为在 JavaScript 执行时,所有通过&nbsp;var&nbsp;定义的变量以及声明式函数都会被提升到当前作用域的顶部而通过&nbsp;var&nbsp;创建的变量是没有块级作用域的,所以会提升到当前函数作用域的顶部在全局作用域定义的变量都是 window 的属性所以这段代码实际上执行的时候是这样的顺序var a;if (! 'a' in window) {&nbsp; a = 123;}console.log(a); // undefined&nbsp;定义了&nbsp;a,但没有赋值,自然输出了&nbsp;undefined关于其中! 'a' in window&nbsp;其实是先对&nbsp;'a'&nbsp;字符串执行非,得到了false,window&nbsp;里没有&nbsp;window.false&nbsp;这个属性,返回了&nbsp;false,没有进入 if 代码块。具体可尝试以下例子false in window; // falsewindow.false = 123;false in window; // true!false in window; // falsetrue in window; // falsewindow.true = 456;!false in window; // true'true' in window; // true第二个问题if (! 'a' in window) {&nbsp; a = 123;}console.log(a); // Uncaught ReferenceError: a is not defined看懂了上面这个就很简单了,没用&nbsp;var&nbsp;定义(不存在提升),又没进&nbsp;if,导致没有定义 a,报错。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript