Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 窗口与此作为IIFE中的参数_Javascript_Iife - Fatal编程技术网

Javascript 窗口与此作为IIFE中的参数

Javascript 窗口与此作为IIFE中的参数,javascript,iife,Javascript,Iife,我在Javasript库中经常看到这个IIFE“模板” (功能(窗口、文档){ //代码 }(窗口类型!=“未定义”?窗口:此,文档)当脚本在服务器端运行时,窗口可能未定义,例如,当使用Node.js时 此处显示了一个示例:在服务器上运行javascript代码(即node.js或它的任何其他分支)时,查看您的问题,您一定在谈论这个案例 在这种情况下,既不定义窗口对象也不定义文档对象,因为节点上不存在这些对象,所以代码将抛出引用错误。删除对文档对象的引用并测试此变量的 (function(wi

我在Javasript库中经常看到这个IIFE“模板”

(功能(窗口、文档){
//代码

}(窗口类型!=“未定义”?窗口:此,文档)当脚本在服务器端运行时,
窗口
可能未定义,例如,当使用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的包。