2012-05-07 22 views
2

我最近開始爲我的腳本使用"use strict"。我注意到的一個行爲就是這個。 [name of variable]不適用於對象。例如:使用「嚴格使用」和變量範圍

(function(){ 
    "use strict"; 

    window.person = {} 
    person.name = { 
    first: "first name", 
    last: this.first 
    } 
}()); 

看起來像嚴格的js不允許它了。爲什麼這個被刪除?有什麼缺點嗎?

+0

你期望'this.first'返回什麼? – Andrew

+0

[在JavaScript中做什麼「嚴格使用」)(http://stackoverflow.com/q/1335851/2666313) – mdesdev

回答

8

在沒有對上下文進行任何隱式或顯式設置而調用的函數中,this變爲undefined

如果立即調用的函數的外部上下文是全局範圍,並且這是您對其自己的上下文所期望的內容,那麼可以使用.call(this)將其上下文設置爲外部上下文的上下文。

(function(){ 
    "use strict"; 

    window.person = {} 
    person.name = { 
     first: "first name", 
     last: this.first 
    } 
}).call(this); 

不論嚴格/非嚴格模式的,this永遠不會使用文字符號被創建的對象的引用。這就是JavaScript的工作原理。