在Stoyan Stefanov的《JavaScript Patterns》一书中,有一个关于自定义函数的部分。
var scareMe = function(){
console.log("Boo!");
scareMe = function(){
console.log("Double Boo!");
}
}
scareMe();//==>Boo!
scareMe();//==>Double Boo!
它的表现符合我的预期。但是我修改了scareMe函数如下:
function scareMe(){
console.log("Boo!");
function scareMe(){
console.log("Double Boo!");
}
}
scareMe();//==>Boo!
scareMe();//==>Boo!
问题:
- 它们之间有什么区别?
- 为什么第二种情况的输出不是“Double Boo!”而是“Boo!”?
function init() { init = function() {}; /* ... */ };
现在只要我仅通过名称使用init
而不实际捕获对原始函数的引用,它就只会初始化一次。这可以使用布尔变量来完成,但这样你就少了一个要跟踪的变量。 - icktoofay