这个关键字在 NodeJS 和 Vanila JavaScript 之间的作用不同

我正在尝试了解 JavaScript 词法范围和闭包。我使用 Node.js 运行了这个示例,然后在浏览器中得到了 2 个不同的输出。


测试chrome Version 80.0.3987.149 (Official Build) (64-bit)

和Node v12.16.1


var obj1 = {

        name: "Pulsar",

        bike: function() {

          console.log(this.name);

        }

      }

      var obj2 = { name: "Gixxer", bike: obj1.bike };

      var name = "Ninja";

      var bike = obj1.bike;

      

      bike();           // "Ninja"

      obj1.bike();      // "Pulsar"

      obj2.bike();      // "Gixxer"


这段代码在Vanilla JavaScript. 输出是:


Ninja 

Pulser

Gixxer

在NodeJS输出中是:


undefined

Pulsar

Gixxer

有人可以解释一下吗?


海绵宝宝撒
浏览 98回答 2
2回答

HUX布斯

在浏览器中,顶级范围是全局范围。这意味着当你用它定义某些东西时,var它就变成了全局对象的一个属性,即window.所以bikeandname都定义在全局范围内,这意味着它们都是window属性,所以this指向window并且它有一个name属性,值为Ninja。在node中,全局范围内的任何var都定义在不同的本地模块中,因此this与变量bike无关name

慕尼黑8549860

在浏览器中,window对象是全局this对象,所有变量都被分配为其属性。在节点中,没有这样的对象。有一个this( {})globalThis和module,但是模块变量没有被分配给它们,而是在内存中分配。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript