分配函数window.onerror似乎是一种非常直接的方式来开始处理页面上的代码中的错误.但是,确保不覆盖预先存在的错误处理程序非常重要,因此通常的做法是保持对先前值的引用并将其作为新函数的一部分进行调用.举个例子:
var old_onerror = window.onerror;
window.onerror = function() {
// do something
if (old_onerror) {
old_onerror();
}
};
Run Code Online (Sandbox Code Playgroud)
我可以在网上找到的大多数文档/博客文章/等建议做这样的事情.他们为什么不建议为事件添加事件处理程序'error'呢?这允许在触发其中一个事件时调用多个函数,并且不需要笨拙地维护对其他错误处理程序的引用.
window.addEventListener('error', function() {/* do something */});
Run Code Online (Sandbox Code Playgroud)
编辑:我考虑过遵循关于这个主题的标准建议,但error事件window似乎是一个相当特殊的情况(例如,参见JQuery 显然缺乏对它的支持(在该页面上搜索"onerror")).我特意寻求洞察为什么onerror似乎是一个特例.
IIFE需要访问非重写window对象 - 可以看作:
像(jQuery示例):
$(function (global) {
// do something with global
})( window );
Run Code Online (Sandbox Code Playgroud)
但有时我也看到这个(underscore.js):
(function() {
var global= this;
// do something with global
}).call(this);
Run Code Online (Sandbox Code Playgroud)
问题1:有什么区别吗?如果是这样,我应该何时使用?
问题2:this里面IIFE 是 window.为什么有必要"发送" window/ call(this)?(jQuery没有使用严格模式imho)
NB
看起来jQuery(从1.11.0开始)也采用了这种模式:
(function (global, factory)
{
//....
}(typeof window !== "undefined" ? window : this, function (window, noGlobal)
{
//...
});
Run Code Online (Sandbox Code Playgroud)