javascript - Eloquent JavaScript - 通过此关键字引用不起作用?

标签 javascript this

我想确定,http://eloquentjavascript.net/10_modules.html , 例子:



    (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 进行调试)中执行相同操作时,它说 weekDay 未定义。我已经弄清楚这是因为 this 关键字不是指包含整个代码的对象,而是指包含调用函数的对象的对象,所以我试过这个:

<p></p>

<pre><code>(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
</code></pre>

它有效,谁能解释为什么? IMO 传递的参数不被视为函数变量,而是属于调用该函数的对象的变量(但是为什么书中的代码那时可以在网站上运行?)。

最佳答案

首先,不要因为不理解这个而难过。这令人困惑。

这很好地总结了 this:

https://github.com/getify/You-Dont-Know-JS/blob/master/this%20%26%20object%20prototypes/ch1.md#review-tldr

支持 Kyle 老师。

我的 TL;DR:您在节点中调用的 this 绑定(bind)到文件中运行的代码。您在浏览器中调用的 this 绑定(bind)到 window 对象,该对象是浏览器中可用的特殊对象,具有过去时代遗留下来的超能力。 ;)

记住 this 是一个绑定(bind),在调用函数时创建,它引用的内容完全取决于调用函数的调用点。

在示例沙箱(从浏览器的全局范围调用)中,this 指的是浏览器的window 对象。 window 是浏览器的全局对象。它包含所有全局变量。您的调用站点是全局范围。

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

还有一个插曲:阅读 Kyle 的书。去听他的课。他是一位了不起的老师。

关于javascript - Eloquent JavaScript - 通过此关键字引用不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46227921/

相关文章:

javascript - 是什么原因导致 Blogspot 中的 Google+ 评论在某些页面上不起作用?

javascript object literal - 嵌套函数和 "this"关键字

java - 是否可以将新对象分配给 'this' ?

javascript - uploadTask.snapshot.downloadURL 未在响应中给出文件的下载 URL

Javascript,查找嵌套属性(如果存在)

javascript - Web Components(原生 UI)之间如何通信?

javascript - 如何在下拉列表中按字母顺序对数组进行排序

Javascript对象文字,如何解决上下文?

javascript - "This"未引用当前对象

JavaScript 调用方法