2010-04-30 107 views
2

这可能是一个结点的问题,但我不明白为什么这个工程:Javascript解析/评估订单?

<script type="text/javascript"> 
    alert(foo); 
    function foo() { } 
</script> 

此提醒“函数foo(){}”,但我预计警惕函数foo之前评估是定义。有人可以解释我对分析/评估订单不了解的内容,或者将我指向一个资源吗?

回答

3

与PHP一样,JavaScript在代码运行之前跟踪顶级function声明。 但是,您可以通过使用分配绕过自动功能:

var a = function a() { }

+3

请注意,函数仍然会在IE的'var'声明之前由于严重[bug](http://groups.google.com/group/comp.lang.javascript/msg/5b508b03b004bce8)出现在所有JScript版本上,因为函数表达式被命名。 – CMS 2010-04-30 04:09:18

+0

@CMS有趣的小笔记。这会影响所有版本的IE吗? – alex 2010-04-30 04:21:28

+0

@alex,是** IE的所有**版本,包括IE 9平台预览! (我真的很失望),这个bug甚至比它更糟糕,它创建了两个函数对象,例如'var foo = function bar(){};警报(FOO ===巴); // false!' – CMS 2010-04-30 04:27:37

0

函数声明提升到顶部,因此宣布第一位的。

可以通过分配他们改变这种行为,给一个变量,像这样

var a = function() { 
    // do it 
}; 

这个变量a分配给一个匿名函数。