2

看看下面的代码:

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.8chrome 是27.0.1453.93.

4

1 回答 1

6

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

当您直接调用函数时,this将是函数内部的全局对象,用于在非严格模式下进行该调用。

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

于 2013-07-04T19:30:06.707 回答