看看下面的代码:
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/