window 与此作为 IIFE 中的参数
window vs this as parameter in IIFE
我在 Javasript 库中经常看到这个 IIFE "template"。
(function(window, document) {
// code
}(typeof window !== "undefined" ? window : this, document));
并且想问:在什么情况下 window 对象是未定义的?在那种情况下,this 指的是什么?
当脚本在服务器端为 运行 时,window
可能未定义,例如,当使用 Node.js.
时
看看你的问题,你一定是在谈论当你 运行 服务器上的 javascript 代码时的情况,即 node.js 或它的任何其他分支。
在这种情况下,window 对象或文档对象均未定义,因为节点上存在 none 个对象,因此您的代码将抛出引用错误。删除对文档对象的引用并测试 this 变量
(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));
会在控制台输出一个。检查 this SO question 以了解有关 node.js 中 this 对象的值的更多信息。
我在 Javasript 库中经常看到这个 IIFE "template"。
(function(window, document) {
// code
}(typeof window !== "undefined" ? window : this, document));
并且想问:在什么情况下 window 对象是未定义的?在那种情况下,this 指的是什么?
当脚本在服务器端为 运行 时,window
可能未定义,例如,当使用 Node.js.
看看你的问题,你一定是在谈论当你 运行 服务器上的 javascript 代码时的情况,即 node.js 或它的任何其他分支。
在这种情况下,window 对象或文档对象均未定义,因为节点上存在 none 个对象,因此您的代码将抛出引用错误。删除对文档对象的引用并测试 this 变量
(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));
会在控制台输出一个。检查 this SO question 以了解有关 node.js 中 this 对象的值的更多信息。