gpt4 book ai didi

javascript - Node 不会运行来自 Eloquent Javascript 的示例,v8 会。这是怎么回事?

转载 作者:搜寻专家 更新时间:2023-10-31 23:09:14 25 4
gpt4 key购买 nike

下面的函数是从 Ch 中逐字复制的。 Eloquent Javascript 的 10 个,它与 v8 解释器完美运行。但是,它在 undefined object weekDay 的 Node 中爆炸。它在本书提供的沙箱解释器中也运行良好。谁能解释一下这是怎么回事?

(function(exports) {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];

exports.name = function(number) {
return names[number];
};
exports.number = function(name) {
return names.indexOf(name);
};
})(this.weekDay = {});

console.log(weekDay.name(weekDay.number("Saturday")));

最佳答案

这是因为 Node 模块中的 this 没有指向全局对象。它指向该模块的 exports。这意味着 weekDay 不能用作全局变量。

// ---------v
console.log(exports.weekDay.name(weekDay.number("Saturday")));

// ---------v
console.log(this.weekDay.name(weekDay.number("Saturday")));

为了更广泛(和简化)地了解 Node 模块的外观,它基本上是获取您的代码并将其放入 IIFE 中。

所以如果这是你的模块......

this.foo = "bar"
console.log(exports.foo); // "bar"

之所以有效,是因为它实际上是这样的……

var exports = {};    // Generated by Node
(function(exports) { // Generated by Node

this.foo = "bar"
console.log(exports.foo); // "bar"

}).call(exports, exports); // Generated by Node

其中额外的代码行由 Node.js 生成。您可以看到它创建了一个对象,它同时用作 IIFE 函数的 this 值和 exports 参数。

他们还向 IIFE 传递了更多内容,但这显示了基本思想。

关于javascript - Node 不会运行来自 Eloquent Javascript 的示例,v8 会。这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29335508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com