nodejs

2016-09-09 9 views
1

実行Node.jsの5月v6.0.0でこのコード:nodejs

x = 3; 
var foo = { 
    x:1, 
    bar: { 
    x: 2, 
    baz: function() { 
     console.log(this.x); 
    } 
    } 
}; 

foo.bar.baz(); 
var a = foo.bar.baz; 
a(); 

エラー:

2 
TypeError: Cannot read property 'x' of undefined 

しかし、クロム52.0.2743.116でコンソール:

2 
3 
+0

ノードv6.0.0で私のために働いています。ノードに表示されているのと同じコードを実行してもよろしいですか? – mscdex

+0

ああ!違います! 'x = 3'を' module.exports.x = 3'に変更し、それをstrictモードで実行してください。 –

+0

私は知っている! strictモードでは、グローバルオブジェクトを指すことはできません。 –

答えて

1

これは、ES6で厳密なモードになっている場合にのみ発生します。その場合、最上位の「this」は何も指していません。 'use strict'(Nodejsでモジュールを定義するときに暗黙的に設定されています)がなければ、動作はChromeで見られるのと同じになります。

ただし、厳密なモードで動作するコードでは、x = 3より前に 'var'を配置する必要があります。