javascript - 为什么从全局 init 函数调用 window.init 不会导致无限递归?

标签 javascript function global-scope

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

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/

相关文章:

javascript - 如何更改输入类型 datetime-local 的格式?

javascript - 如何将curl转换为javascript post请求

postgresql - Postgres 存储函数如何返回表

C++:将类作为参数传递给其他类的方法

namespaces - 共享 JavaScript 库的命名空间还是使用你自己的?

c++ - 外线成员函数定义是否需要全局范围内的完全限定类名?

javascript - Jquery 可拖动的内向外包含

javascript - 在react中从父组件中删除多个子组件

c++ - 将数组传递给函数时遇到问题