Eloquent JavaScript 中的 "exports" 如何工作?
How does "exports" from Eloquent JavaScript work?
我从 this passage of Eloquent JavaScript 中发现这段代码我无法理解:
(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")));
特别是看不懂this.weekDay
:这里的this
是什么?
以及我们如何访问 weekDay.name
——它在函数的范围内,那么我们如何在函数外访问它?
weekDay
是 not 在显示的函数范围内访问; exports
是。
分配给weekDay
(即this.weekDay = {}
)的新对象作为参数提供给IIFE(立即调用的函数表达式);因此在函数内部修改对象(通过exports
)会影响其他地方的同一个对象..
.. 由于原始赋值,此对象在调用范围内称为 weekDay
(全局变量)。
(function ( exports ) {
// in function
})( this.weekDay = {} ); // <-- not in function, 'this.' is superfluous
在全局范围内,this
指的是全局对象(在网络浏览器中是 window
,在 Node.js 中是 global
)。所以在这种情况下,赋值 this.weekDay = {}
等同于 window.weekDay = {}
或者只是 weekDay = {}
,所有这些都创建了一个名为 weekDay
的全局变量。使用 this
而不是 window
的好处是您可以对浏览器和 Node 使用相同的表示法。模块定义下方对 weekDay
的引用仅指全局 weekDay
变量;它们也可以写成 this.weekDay
或 window.weekDay
。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
我从 this passage of Eloquent JavaScript 中发现这段代码我无法理解:
(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")));
特别是看不懂this.weekDay
:这里的this
是什么?
以及我们如何访问 weekDay.name
——它在函数的范围内,那么我们如何在函数外访问它?
weekDay
是 not 在显示的函数范围内访问; exports
是。
分配给weekDay
(即this.weekDay = {}
)的新对象作为参数提供给IIFE(立即调用的函数表达式);因此在函数内部修改对象(通过exports
)会影响其他地方的同一个对象..
.. 由于原始赋值,此对象在调用范围内称为 weekDay
(全局变量)。
(function ( exports ) {
// in function
})( this.weekDay = {} ); // <-- not in function, 'this.' is superfluous
在全局范围内,this
指的是全局对象(在网络浏览器中是 window
,在 Node.js 中是 global
)。所以在这种情况下,赋值 this.weekDay = {}
等同于 window.weekDay = {}
或者只是 weekDay = {}
,所有这些都创建了一个名为 weekDay
的全局变量。使用 this
而不是 window
的好处是您可以对浏览器和 Node 使用相同的表示法。模块定义下方对 weekDay
的引用仅指全局 weekDay
变量;它们也可以写成 this.weekDay
或 window.weekDay
。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this