V8 javascript:chrome vs node.js – “this”上下文的区别

看看下面的代码:

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。 怎么会有这样的区别?

编辑:如果有什么区别,我的节点版本是v0.10.8和铬是27.0.1453.93

在node.js代码在模块包装器中运行,所以variables不是偶然的全局。 在Chrome和其他任何浏览器中,你都需要这样做,否则你创build的每个variables都是全局的。

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

所有全局variables都是全局对象的属性,所以您可以通过全局对象的.cash属性访问全局variables现金。