我知道如何解决这个错误,但有没有人告诉我为什么会发生这个错误的全面解释?

var fn = function () {
  return fn();
}(); //uncaught TypeError: Property 'fn' of object [object DOMWindow] is not a function

最佳答案

在全局范围内使用 var 关键字时,声明的变量将成为全局对象的属性。在 Web 浏览器中,全局对象是 window 对象,它本身就是 DOMWindow() 的一个实例。因此,使用这些知识,我们可以将您的代码重写为如下所示:

window.fn = function () {
    return window.fn();
}();

去掉初始任务,我们有
(function () {
    return window.fn();
})();

...它定义了一个匿名函数,其中 window.fn() 被调用。但是,在此代码运行时,window.fn 不是函数(并且永远不会),因此会抛出异常,因为即使它没有内部 [[Call]] 标志,您也试图调用它。

如果去掉匿名函数的立即执行,那么 window.fn 将是一个函数:
var fn = function () {
    return fn();
}
fn(); //-> infinite loop

关于javascript - 未捕获的类型错误 : Property 'fn' of object [object DOMWindow] is not a function,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7377653/

10-13 00:42