javascript - v8 中 node.js 和 chrome 的区别

标签 javascript node.js google-chrome

Chrome 版本 49.0.2623.110m

Node v5.10.0

这是我的代码:

var a = 0;

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

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

Chrome 给

1
1
2

Node 给出

0
0
2

为什么会这样?

谢谢

最佳答案

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

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

在 node.js 中,每个 JavaScript 文件都有自己的模块上下文,与全局上下文分开,所以 var a = 0;没有创建全局,而您使用 this.a = 1; 创建的全局将被自己的模块隐藏 a .

关于javascript - v8 中 node.js 和 chrome 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36408236/

相关文章:

javascript - jQuery 切换动画与 element.forEach

javascript - 这个tampermonkey代码有什么错误?

node.js - Webpack - 捆绑脚本而不指定入口点

javascript - 使用history.push时如何重定向到另一个端口?

c# - 沙盒解决方案中的不良列表项提交逻辑

javascript - 如何在 NodeJS 中传递命令行参数?

javascript - Electron 窗口尺寸与屏幕分辨率

html - 绝对定位div内的SVG不显示

javascript - 如何通过 javascript 在 FF 和 Chrome 中设置默认主页?

selenium - 此版本的 ChromeDriver 尚未经过 Chrome 版本 79 的测试,使用 ChromeDriver Chrome Selenium 运行 protractorE2E 测试时出错