Javascript 立即调用的函数表达式,带有一个";这是“变量”;括号内

Javascript 立即调用的函数表达式,带有一个";这是“变量”;括号内,javascript,node.js,Javascript,Node.js,为什么要声明一个立即调用的函数定义,然后在末尾的另一个括号中使用“this.variable”作为参数?代码给出的结果是“星期六”,但是你能解释一下这个代码是如何工作的吗 (function(exports) { var names = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; exports.name = function(number)

为什么要声明一个立即调用的函数定义,然后在末尾的另一个括号中使用“this.variable”作为参数?代码给出的结果是“星期六”,但是你能解释一下这个代码是如何工作的吗

(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")));
// → Saturday

也许这会让你更容易理解

(function(){//my this的对象,而不是全局this
职能iife(出口){
//只能在iLife上下文中访问
变量名称=[
“Sunday”,//索引号0
“星期一”//1
“星期二”//2
“星期三”//3
“星期四”//4
“星期五”//5
“星期六”//6
];
//将属性名称指定给函数为值的导出对象
exports.name=函数(编号){
返回名称[编号];
};
//将属性编号指定给函数为值的导出对象
exports.number=函数(名称){
返回名称。indexOf(名称);
};
}
//将属性weekDay指定给此对象,并将对象作为值
this.weekDay={};
//用第一个参数作为对象的引用调用iLife
生活(这是工作日);
//我们可以通过指定的属性查看此对象的工作日
console.log(this);
//在工作日命名空间上调用number函数
//如果我们可以访问名称:names.indexOf('Saturday')->6
var dayNumber=this.weekDay.number(“星期六”);
控制台日志(日数);
//在工作日命名空间上调用name函数
//如果我们可以访问名称:名称[6]->“星期六”
var dayName=this.weekDay.name(dayNumber);
console.log(dayName);

}).call({});//让我的this object
也许这有助于理解这里的this指的是全局对象是的,这是真的。Xotic750的答案解释了这是根据您的解释它的样子-函数iife(exports){var name=[“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”];exports.name=函数(number){return names[number];};exports.number=函数(name){返回names.indexOf(name);};}this.weekDay={};iLife(this.weekDay);console.log(weekDay.name(weekDay.number(“星期三”);//→ 星期六