我在JavaScript(Firefox 3.5,Windows XP)中尝试了以下内容:
(function(){
window.foobar = 'Welcome!';
})();
var foobar = 'PWN3D!';
alert(foobar);
输出为'PWN3D!'。为什么我的代码PWN我?我以为var name = value;
先执行了。
答案 0 :(得分:10)
来自specification(第87页):
执行VariableStatement时,为Initialiser的变量赋予其AssignmentExpression的值,而不是在创建变量时。
因此var
导致首先创建变量,但是值('PWN3D!'
)以正常执行顺序分配给它。
答案 1 :(得分:2)
我不确定首先执行的var
语句是什么意思。您编写的代码看起来完全像我预期的那样工作:
foobar
设置为“欢迎!”foobar
变量设置为“PWN3D!”foobar
,“PWN3D!”答案 2 :(得分:1)
您的警告语句会看到局部变量foobar并提醒其值,因为它在范围链上比window.foobar更高。