JavaScript:如果首先执行var语句,那么为什么这不起作用?

时间:2010-02-07 22:40:09

标签: javascript

我在JavaScript(Firefox 3.5,Windows XP)中尝试了以下内容:

(function(){
    window.foobar = 'Welcome!';
})();

var foobar = 'PWN3D!';

alert(foobar);

输出为'PWN3D!'。为什么我的代码PWN我?我以为var name = value;先执行了。

3 个答案:

答案 0 :(得分:10)

来自specification(第87页):

  

执行VariableStatement时,为Initialiser的变量赋予其AssignmentExpression的值,而不是在创建变量时。

因此var导致首先创建变量,但是值('PWN3D!')以正常执行顺序分配给它。

答案 1 :(得分:2)

我不确定首先执行的var语句是什么意思。您编写的代码看起来完全像我预期的那样工作:

  • 创建匿名函数
  • 执行匿名函数,将foobar设置为“欢迎!”
  • foobar变量设置为“PWN3D!”
  • 引发一个警告框,其当前值为foobar,“PWN3D!”

答案 2 :(得分:1)

您的警告语句会看到局部变量foobar并提醒其值,因为它在范围链上比window.foobar更高。