javascript - V8 javascript : chrome vs node. js - 'this' 上下文中的差异

标签 javascript node.js google-chrome this v8

看看下面的代码:

var pocket = {
        cash: 1000,
        showCash: function() {
                return this.cash;
        }
};

var thomas = {
        name: "Thomas",
        work: function() {
                console.log('I don\'t want to, but I have to... work!');
        },
        cash: 5000
};

var bird = {
        fly: function() {
                console.log('I\'m flying!');
        }
};

console.log(pocket.showCash());

thomas.showCash = pocket.showCash;
console.log(thomas.showCash());

bird.showCash = pocket.showCash;
console.log(bird.showCash());

var cash = 20;
var showCashFun = pocket.showCash;
console.log(showCashFun());

代码非常简单,展示了引擎如何解释this关键字。当我在 chrome 控制台中运行它时,我得到以下输出:

1000
5000
undefined
20

没关系 - 我完全理解。但是当我在 node.js 控制台中运行它时,我得到:

1000
5000
undefined
undefined

chrome 和 node.js 都使用 v8。怎么会有这么大的差距?

编辑:以防万一,我的 Node 版本是 v0.10.8,chrome 是 27.0.1453.93

最佳答案

在 node.js 中,代码在模块包装器中运行,因此变量不会意外地成为全局变量。在 Chrome 和任何其他浏览器中,您需要自行包装,否则您创建的每个变量都是全局的。

当你直接调用一个函数时,this 将是非严格模式下该调用的函数内部的全局对象。

所有的全局变量都是全局对象的属性,所以可以通过全局对象的.cash属性访问全局变量cash。

关于javascript - V8 javascript : chrome vs node. js - 'this' 上下文中的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17477006/

相关文章:

mysql - 如何在异步函数中发出post请求?

css - 背景图像不会间歇性显示。 Mac 上的谷歌浏览器

javascript - 在 Chrome 中,我无法将尚未附加到文档的 <select> 的值设置为空字符串

javascript - Google App使用oauth2对box.com进行外部API调用,未找到回调函数

javascript - 添加空系列会更改轴最小值

javascript - 如何将模型传递给 Angular.js 中的指令?

javascript - 如何用node.js正确输出引号

.net - 如何将 ASP.NET Treeview 控件绑定(bind)到数据表?

javascript - Gulp中child_process无法执行上一步生成的JS程序

html - 在 Safari 和 Chrome 中格式化