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.8で、クロムは27.0.1453.93です。

4

1 に答える 1

6

node.js では、コードはモジュール ラッパーで実行されるため、変数が誤ってグローバルになることはありません。Chrome およびその他のブラウザーでは、このラップを自分で行う必要があります。そうしないと、作成するすべての変数がグローバルになります。

関数を直接呼び出すthisと、非厳密モードでのその呼び出しの関数内のグローバル オブジェクトになります。

すべてのグローバル変数はグローバル オブジェクトのプロパティであるため、グローバル オブジェクトのプロパティを通じてグローバル変数キャッシュにアクセスでき.cashます。

于 2013-07-04T19:30:06.707 に答える