我看到这个IIFE"模板"在Javasript图书馆中有很多。
(function(window, document) {
// code
}(typeof window !== "undefined" ? window : this, document));

并想问:在什么情况下窗口对象未定义?在这种情况下,这个引用了什么?
答案 0 :(得分:1)
在服务器端运行脚本时,window
可能未定义,例如,使用Node.js时。
答案 1 :(得分:0)
看看你的问题,你必须在服务器上运行你的javascript代码,即node.js或其他任何分支时讨论这个案例。
在这种情况下,既没有定义窗口对象也没有定义文档对象,因为节点上不存在这些对象,因此您的代码将引发参考错误。删除对文档对象的引用并测试此变量
(function(window) {
console.log(window);
console.log(typeof window);
console.log(Object.prototype.toString(window));
}(typeof window !== "undefined" ? window : this));
输出
{}
object
[object Object]
这是一个空对象,它是对module.exports对象的引用。这很容易测试。
module.exports.test = function () {
console.log('a');
};
(function(window) {
window.test();
}(typeof window !== "undefined" ? window : this));
将在控制台中输出a。检查this SO question以了解有关node.js中此对象的值的更多信息。