Je veux être sûr, http://eloquentjavascript.net/10_modules.html, par exemple:EloquentJavaScript - Référencement par ce mot clé ne fonctionne pas?
(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")));
// → weekDay not defined
Il fonctionne quand je le lance sur le site mentionné, mais lorsque je tente de faire de même dans le code vs (+ Node.js à debug), il dit que weekDay
n'est pas défini. J'ai compris que la cause de ceci est que ce mot-clé ne se réfère pas à l'objet qui contient le code entier, mais il se réfère à l'objet qui contient l'objet, donc j'ai essayé ceci:
Et cela fonctionne, quelqu'un peut-il expliquer pourquoi? L'argument passé par l'OMI n'est pas traité comme une variable de fonction, mais comme une variable appartenant à l'objet qui appelle la fonction (mais pourquoi le code du livre fonctionne-t-il sur le site Web alors?).
(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); }; })(weekDay = {}); console.log(weekDay.name(weekDay.number("Saturday"))); // → Saturday