函数(导出)returns 一个错误 "Cannot set property 'weekDay' of undefined"

function(exports) returns an error "Cannot set property 'weekDay' of undefined"

所以我正在阅读 Eloquent JS 书的 'Modules' 章,我遇到了函数(导出)部分的问题。

(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(1));

returns

Cannot set property "weekDay" of undefined

然而,在本书网站上的在线编辑器中,完全相同的代码运行没有问题 return "Monday"。

我想知道是不是 Adob​​e Brackets 的问题。

使用不依赖于在全局脚本范围内执行的模块模式,其中 this 将是全局对象。我推荐

var weekDay = (function (exports) {
    var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday"];
    return {
        name: function (number) {
            return names[number];
        },
        number: function (name) {
            return names.indexOf(name);
        }
    };
}());

所以是的,这是由您的环境造成的,但代码首先是脆弱的。如果你想继续使用那个exports东西,你也可以做

var weekDay;
(function (exports) {
    …
})(weekDay = {});

或者检查 How to get the global object in JavaScript? and Getting a reference to the global object in an unknown environment in strict mode.