2016-09-09 98 views
1

運行不確定的代碼在node.js中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 

但在Chrome 52.0.2743.116控制檯:

2 
3 
+0

它適用於我的節點v6.0.0。你確定你執行了你在節點中顯示的相同代碼嗎? – mscdex

+0

哦!這不一樣!請將'x = 3'更改爲'module.exports.x = 3'並以嚴格模式運行'; –

+0

我知道!在嚴格模式下,這不能指向全局對象。 –

回答

1

只有在ES6中處於嚴格模式時纔會發生這種情況。在這種情況下,頂級「這個」並不指向任何東西。如果沒有「嚴格使用」(在Nodejs中定義模塊時隱式設置),則行爲將與您在Chrome中看到的相同。

請注意,爲了使代碼在嚴格模式下工作,您需要在x = 3之前放置一個'var'。