为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2022-06-16 10:07:59
我正在尝试了解 JavaScript 词法范围和闭包。我使用 Node.js 运行了这个示例,然后在浏览器中得到了 2 个不同的输出。测试chrome Version 80.0.3987.149 (Official Build) (64-bit)和Node v12.16.1var 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 PulserGixxer在NodeJS输出中是:undefinedPulsarGixxer有人可以解释一下吗?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

在浏览器中,顶级范围是全局范围。这意味着当你用它定义某些东西时,var它就变成了全局对象的一个属性,即window.

所以bikeandname都定义在全局范围内,这意味着它们都是window属性,所以this指向window并且它有一个name属性,值为Ninja

在node中,全局范围内的任何var都定义在不同的本地模块中,因此this与变量bike无关name


查看完整回答
反对 回复 2022-06-16
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

在浏览器中,window对象是全局this对象,所有变量都被分配为其属性。在节点中,没有这样的对象。有一个this{})globalThismodule,但是模块变量没有被分配给它们,而是在内存中分配。



查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信