【发布时间】:2015-09-16 10:10:33
【问题描述】:
谁能解释以下场景中的吊装行为?
alert(x);
var x = 10;
Result: alert-undefined
在以下情况下,x 没有使用 'var' 关键字定义 - 因此附加到全局范围。
alert(x);
x = 10; // not given a var
Result: error
如果我们将 x 替换为 window.x,我们会得到未定义的警报!
alert(window.x); // calling the variable with window namespace
x = 10; // not given a var
Result: alert-undefined
你能解释一下为什么用变量名 (x) 和窗口命名空间 (window.x) 调用变量(附加到全局范围)不同吗?
【问题讨论】:
-
您是否尝试过与
window["x"]相同的程序? -
@TomDoodler
window["x"]等于window.x所以它不会有任何区别。 -
警报(x);变量 x = 10;等于 var x;警报(x); x=10;所以第一个是未定义的
-
如果你想要一个连贯的行为,请使用
"use strict"。 -
为了完整起见,this post 实际上描述了 JS 中更奇怪的行为
标签: javascript hoisting