如果我运行以下内容:
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一样。
答案 0 :(得分:4)
您忘了添加分号:
var fn = function(){};
(function(){
fn();
}());
答案 1 :(得分:1)
该死的,是ASI。
var fn = function(){};
(function(){
fn();
}());