IIFE中无法使用功能参考?

时间:2012-09-13 19:47:44

标签: javascript scope iife

如果我运行以下内容:

var fn = function(){}

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

在Chrome中抛出“TypeError:undefined不是函数”,Firebug中的“TypeError:fn不是函数”。

此范围链中fn不应该window.fn,而不必var fn = function(){} console.log(fn); (function(){ fn(); }()); 吗?

奇怪的是,如果我跑:

fn

然后它的行为符合预期:{{1}}被记录为一个函数,并且Chrome或Firefox都不会引发任何错误。

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

2 个答案:

答案 0 :(得分:4)

您忘了添加分号:

var fn = function(){};

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

答案 1 :(得分:1)

该死的,是ASI。

var fn = function(){};

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