Javascript 窗口与此作为IIFE中的参数
我在Javasript库中经常看到这个IIFE“模板”Javascript 窗口与此作为IIFE中的参数,javascript,iife,Javascript,Iife,我在Javasript库中经常看到这个IIFE“模板” (功能(窗口、文档){ //代码 }(窗口类型!=“未定义”?窗口:此,文档)当脚本在服务器端运行时,窗口可能未定义,例如,当使用Node.js时 此处显示了一个示例:在服务器上运行javascript代码(即node.js或它的任何其他分支)时,查看您的问题,您一定在谈论这个案例 在这种情况下,既不定义窗口对象也不定义文档对象,因为节点上不存在这些对象,所以代码将抛出引用错误。删除对文档对象的引用并测试此变量的 (function(wi
(功能(窗口、文档){
//代码
}(窗口类型!=“未定义”?窗口:此,文档)代码>当脚本在服务器端运行时,窗口
可能未定义,例如,当使用Node.js时
此处显示了一个示例:在服务器上运行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));
将在控制台中输出一个。检查以了解更多关于node.js中此对象值的信息。在什么情况下窗口对象是未定义的?
:-当您在服务器端运行JavaScript时。谢谢,这很有意义。但还有一个问题。为什么不对文档参数执行相同的操作,因为它也没有定义?请记住,窗口变量的原因是指向这个变量就是您编写的代码。默认情况下,不会定义任何窗口或文档,这是因为在node.js中没有DOM树,除非您使用的是像jsdom一样实现it的包。