2012-07-28 26 views
3

我讀ECMA 5 262,和感覺上http://es5.github.com/#IsStrictReference「嚴格參照」一詞混淆的含義:什麼是嚴格參照標誌的ECMA 5 262

一提的是一個解決的名稱綁定。引用由三個組件組成,即基本值,引用的名稱和布爾值嚴格引用標誌。基本值可以是未定義的,Object,布爾值,字符串,數字或環境記錄(10.2.1)。未定義的基本值表示該引用無法解析爲綁定。引用的名稱是一個字符串。

對此沒有太多的描述。 Reference上唯一相關的操作是

IsStrictReference(V)。返回參考V的嚴格參考組件。

但沒有操作設置,既不描述我們如何確定值。

我想它必須與嚴格模式有關,但我怎麼能告訴什麼是具體的參考價值?

回答

1

據我所知,在ECMAScript 5(也稱爲ES5)中使用引用strict mode進行初始化時,它是一個參數設置爲true的屬性。當設置了strict mode時,更多操作將導致錯誤(語法,參考,例如初始化一個變量,而不使用關鍵字var)。有關strict mode的更多信息,請參閱MDN-documentation

[編輯]根據意見 我認爲這是範圍strict mode被定義。因此,在

function strict() 
{ 'use strict'; 
    // from here on and within the function 
    // IsStrictReference is true 
    showme = "Am I defined?"; 
    return "Hi! I'm a strict mode function! " + showme; 
} 

function nonstrict() 
{ 
    // IsStrictReference is ... well, undefined I suppose, or false by default 
    showme2 = "Am I defined?"; 
    return "Hi! I'm NOT a strict mode function! " + showme2; 
} 
strict(); //=> ReferenceError: showme is not defined 
notstrict(); //=> "Hi! I'm NOT a strict mode function! Am I defined?" 

執行strict()拋出一個ReferenceError,但nonstrict()沒有。如果您已將use strict-語句放置在功能塊之外,則執行這兩個函數將會拋出ReferenceError

+0

這可能是一個解釋。但是在一個程序中可能會有嚴格和非嚴格的代碼混合。因此,在哪個規則中,我們可以告訴該屬性的值,所生成的引用是否是嚴格代碼的位置,或者是否使用嚴格代碼或blabla創建基礎。我很困惑。 – tdsparrow 2012-07-28 15:42:56

+0

Hi @tdsparrow,請參閱編輯。我建議您(重新)仔細閱讀MDN文檔的鏈接。 – KooiInc 2012-07-28 16:10:29

+0

謝謝@Kooilnc,我向你提供了建議,但是重新閱讀了es5。我想我找到了答案。在[Identifier Resolution](標識符分辨率)(http://es5.github.com/#x10.3.1)中已經很清楚地解釋了,在標識符分辨率過程中會創建'reference',環繞代碼是否嚴格將決定參照中的「嚴格參考」標誌。 – tdsparrow 2012-07-29 02:55:42

相關問題