1

那么,这段代码怎么不会无限循环呢?

window.init = function(){
    console.log("window.init")
}

function init(){
    console.log("init")
    window.init();
}

init();

jsfiddle:http: //jsfiddle.net/FAt6C/

4

1 回答 1

0

您的代码设置为在加载时运行(请参见左上角的框),这基本上告诉 jsFiddle 将此代码包装在一个函数中,然后将其设置为 onload 处理程序。 function init()实际上是在该事件处理程序的范围内声明的,而不是在窗口中。

但是,即使您不包装代码,函数声明也基本上作为设置当前范围的一部分运行,在该范围内的其他内容之前运行(ECMA-262,§10.5)。所以init在你说之前已经存在window.init =...,并且那个赋值语句覆盖了损坏的init。这意味着如果您将换行设置为“无换行”(无论位置如何),您应该只会在控制台中看到“window.init”。

于 2014-01-09T06:49:48.490 回答