EloquentJavaScript-通过该关键字引用不起作用?
我想确定,例如:EloquentJavaScript-通过该关键字引用不起作用?,javascript,this,Javascript,This,我想确定,例如: (function(exports) { var names = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; exports.name = function(number) { return names[number]; }; exports.num
(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
当我在上面提到的网站上运行它时,它可以工作,但当我尝试在vs代码(+node.js to debug)中执行同样的操作时,它表示未定义工作日
。我已经发现,这是因为这个关键字不是指保存整个代码的对象,而是指保存调用函数的对象的对象,所以我尝试了以下方法:
(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
有人能解释为什么吗?IMO传递的参数不被视为函数变量,而是属于调用函数的对象的变量(但为什么书中的代码会在网站上运行呢?)首先,不要因为不理解
而感到难过。这令人困惑
这相当好地概括了这个
:
凯尔老师的道具
我的TL;DR:您在节点中调用的此
绑定到文件中运行的代码。您在浏览器中调用的此
绑定到窗口
对象,该对象是浏览器中的一个特殊对象,具有过去遗留下来的超级功能
请记住这是一个绑定,在调用函数时进行绑定,它引用的内容完全取决于调用函数的调用站点
在示例沙盒中(从浏览器的全局范围调用),此
引用浏览器的窗口
对象<代码>窗口
是浏览器的全局对象。它包含所有全局变量。您的呼叫站点是全局范围
用最简单的术语来说,每个节点文件都在自己的气泡中运行。每个文件都有自己的此
,调用站点是气泡。全局范围内的变量不会自动挂在节点模块的下
还有一个插件:读凯尔的书。去上他的课吧。他是个了不起的老师