2015-08-23 13 views
-2

我发现这个代码,我无法从this passage of Eloquent JavaScript明白:如何从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 - 它在函数的范围内,所以我们如何从函数中访问它?

回答

1

在全球范围内,this指全局对象(它是在网络浏览器windowglobal在Node.js的)。因此,在这种情况下,分配this.weekDay = {}等于window.weekDay = {}weekDay = {},所有这些都创建一个名为weekDay的全局变量。关于使用this而不是window的好处是您可以对浏览器和节点使用相同的表示法。在模块定义下面对weekDay的引用只是指全局变量weekDay;它们也可以写成this.weekDaywindow.weekDay

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

1

weekDay不是在所示的功能范围内访问; exports是。

分配给weekDay被提供作为参数传递给IIFE(立即调用的函数表达式)新对象(即this.weekDay = {});并因此修改函数内部的对象(通过exports)影响其他地方的同一对象。

..由于原始分配,此对象在调用作用域中被称为weekDay(全局变量)。

(function (exports) { 
    // in function 
})(this.weekDay = {}); // <-- not in function, 'this.' is superfluous