我知道如何解决这个错误,但有没有人告诉我为什么会发生这个错误的全面解释?
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/