【问题标题】:Difference between node.js and chrome in v8v8 中 node.js 和 chrome 的区别
【发布时间】:2016-07-24 07:46:51
【问题描述】:

chrome 版本 49.0.2623.110 m

节点 v5.10.0

这是我的代码:

var a = 0;

(function() {
    this.a = 1;
    this.b = 2;
    console.log(a);
} )();

console.log(a);
console.log(b);

铬给

1
1
2

节点给出

0
0
2

为什么会这样?

谢谢

【问题讨论】:

  • 它与 V8 无关,但全局作用域在 Node 和浏览器中的工作方式 (其中全局作用域为 window。试试控制台日志this,应该就清楚了。

标签: javascript node.js google-chrome


【解决方案1】:

当在没有上下文的情况下调用函数(并且您在非严格模式下运行)this 默认为全局对象。

在浏览器中,源代码的顶层在全局上下文中运行,因此this.a,即window.a 与在顶部的全局上下文中声明的var a 相同。分配this.a = 1 与分配a = 1 相同。

在 node.js 中,每个 JavaScript 文件都有自己的模块上下文,该模块上下文与全局上下文分开,因此 var a = 0; 不会创建全局,而您使用 this.a = 1; 创建的全局将被自己的模块遮住 @ 987654329@.

【讨论】:

  • 所以在节点console.log(b)中;在作用域链中向上获取 b,从模块到全局。而在浏览器中,代码直接在全局范围内执行。
  • 在节点中,代码在模块范围内,而在浏览器中,代码是全局范围。谢谢。
  • @EuInsumiPrunc 是的,b 在两者中是相同的,因为模块中没有声明 b 来影响全局。
猜你喜欢
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 2012-07-08
  • 1970-01-01
相关资源
最近更新 更多