2

如果我运行以下命令:

var fn = function(){}

(function(){
    fn();
}());

它在 Chrome 中抛出“TypeError: undefined is not a function”,在 Firebug 中抛出“TypeError: fn is not a function”。

fn应该在这个范围链中可用,而不必这样做window.fn

奇怪的是,如果我运行:

var fn = function(){}
console.log(fn);

(function(){
fn();
}());

然后它按预期运行:fn被记录为一个函数,并且在 Chrome 或 Firefox 中都没有引发错误。

这让我觉得很傻,就像我不应该声称了解 JS。

4

2 回答 2

4

您忘记添加分号:

var fn = function(){};

(function(){
    fn();
}());
于 2012-09-13T19:50:18.920 回答
1

该死的,这是ASI。

var fn = function(){};

(function(){
fn();
}());
于 2012-09-13T19:50:34.130 回答