Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EloquentJavaScript-通过该关键字引用不起作用?_Javascript_This - Fatal编程技术网

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:您在节点中调用的
绑定到文件中运行的代码。您在浏览器中调用的
绑定到
窗口
对象,该对象是浏览器中的一个特殊对象,具有过去遗留下来的超级功能

请记住
这是一个绑定,在调用函数时进行绑定,它引用的内容完全取决于调用函数的调用站点

在示例沙盒中(从浏览器的全局范围调用),
引用浏览器的
窗口
对象<代码>窗口
是浏览器的全局对象。它包含所有全局变量。您的呼叫站点是全局范围

用最简单的术语来说,每个节点文件都在自己的气泡中运行。每个文件都有自己的
,调用站点是气泡。全局范围内的变量不会自动挂在节点模块的

还有一个插件:读凯尔的书。去上他的课吧。他是个了不起的老师