那么,这段代码怎么不会无限循环呢?
window.init = function(){
console.log("window.init")
}
function init(){
console.log("init")
window.init();
}
init();
jsfiddle:http: //jsfiddle.net/FAt6C/
那么,这段代码怎么不会无限循环呢?
window.init = function(){
console.log("window.init")
}
function init(){
console.log("init")
window.init();
}
init();
jsfiddle:http: //jsfiddle.net/FAt6C/
您的代码设置为在加载时运行(请参见左上角的框),这基本上告诉 jsFiddle 将此代码包装在一个函数中,然后将其设置为 onload 处理程序。 function init()
实际上是在该事件处理程序的范围内声明的,而不是在窗口中。
但是,即使您不包装代码,函数声明也基本上作为设置当前范围的一部分运行,在该范围内的其他内容之前运行(ECMA-262,§10.5)。所以init
在你说之前已经存在window.init =...
,并且那个赋值语句覆盖了损坏的init
。这意味着如果您将换行设置为“无换行”(无论位置如何),您应该只会在控制台中看到“window.init”。