那么,为什么这段代码不会无限循环呢?
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 节)。因此,在您说 window.init =...
之前,init
就已经存在,并且该赋值语句会覆盖损坏的 init
。这意味着如果您将换行设置为“无换行”(无论位置如何),您应该只在控制台中看到“window.init”。
关于javascript - 为什么从全局 init 函数调用 window.init 不会导致无限递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013357/