【问题标题】:how come calling window.init from a global init function doesn't cause an infinite recursion?为什么从全局 init 函数调用 window.init 不会导致无限递归?
【发布时间】:2014-01-09 06:46:09
【问题描述】:

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

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

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

init();

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

【问题讨论】:

    标签: javascript function global-scope


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 2011-11-11
      • 2014-03-18
      相关资源
      最近更新 更多