"if (!(""a"" in window)) { var a = 1; } alert(a); 为什么结果是undefined"(示例代

Posted yujiao-99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了"if (!(""a"" in window)) { var a = 1; } alert(a); 为什么结果是undefined"(示例代相关的知识,希望对你有一定的参考价值。

因为所有的全局变量都是window的属性,所以语句 var a = 1;等价于window.a = 1;
所有的变量声明都在范围作用域的顶部
alert("a" in window);
var a;

虽然这个声明是在alert之后,但alert弹出的依然是true,这是因为javascript引擎首先会扫描所有的变量声明,然后将这些变量声明移动到顶部,最终的代码效果是这样的:

var a;
alert("a" in window);
那么对于这道题,我们可以理解为:变量声明被提前了,但变量赋值没有,因为这行代码包括了变量声明和变量赋值,可以将语句拆分为如下代码:
var a;    //声明
a = 1;    //初始化赋值

当变量声明和赋值在一起用的时候,JavaScript引擎会自动将它分为两部以便将变量声明提前,不将赋值的步骤提前是因为他有可能影响代码执行出不可预期的结果

所以,知道了这些概念以后,重新回头看一下题目的代码,其实就等价于:
var a;
if (!("a" in window)) {
    a = 1;
}
alert(a);

那么题目的意思就是:首先声明a,然后判断a是否在存在,如果不存在就赋值为1,很明显a永远在window里存在,这个赋值语 句永远不会执行,所以结果是undefined

以上是关于"if (!(""a"" in window)) { var a = 1; } alert(a); 为什么结果是undefined"(示例代的主要内容,如果未能解决你的问题,请参考以下文章

"if (!(""a"" in window)) { var a = 1; } alert(a); 为什么结果是undefined"(示例代

if语句用户交互字符串

linux shell中的比较符号与特殊符号介绍

shell if 参数

为啥 `if None.__eq__("a")` 似乎评估为 True(但不完全)?

1if