一共有 3 種 ECMA 腳本可執(zhí)行代碼:
- 全局代碼 是指被作為 ECMA 腳本 程序 處理的源代碼文本。一個特定 程序 的全局代碼不包括作為 函數(shù)體 被解析的源代碼文本。
- Eval 代碼 是指提供給 eval 內(nèi)置函數(shù)的源代碼文本。更精確地說,如果傳遞給 eval 內(nèi)置函數(shù)的參數(shù)為一個字符串,該字符串將被作為 ECMA 腳本 程序 進(jìn)行處理。在特定的一次對 eval 的調(diào)用過程中,eval 代碼作為該 程序 的 #global-code 部分。
- 函數(shù)代碼 是指作為 函數(shù)體 被解析的源代碼文本。一個 函數(shù)體 的 函數(shù)代碼 不包括作為其嵌套函數(shù)的 函數(shù)體 被解析的源代碼文本。 函數(shù)代碼 同時還特指 以構(gòu)造器方式調(diào)用 Function 內(nèi)置對象 時所提供的源代碼文本。更精確地說,調(diào)用 Function 構(gòu)造器時傳遞的最后一個參數(shù)將被轉(zhuǎn)換為字符串并作為 函數(shù)體 使用。如果調(diào)用 Function 構(gòu)造器時,傳遞了一個以上的參數(shù),除最后一個參數(shù)以外的其他參數(shù)都將轉(zhuǎn)換為字符串,并以逗號作為分隔符連接在一起成為一個字符串,該字符串被解析為 形參列表 供由最后一個參數(shù)定義的 函數(shù)體 使用。初始化 Function 對象時所提供的函數(shù)代碼,并不包括作為其嵌套函數(shù)的 函數(shù)體 被解析的源代碼文本。
嚴(yán)格模式下的代碼
一個 ECMA 腳本程序的語法單元可以使用非嚴(yán)格或嚴(yán)格模式下的語法及語義進(jìn)行處理。當(dāng)使用嚴(yán)格模式進(jìn)行處理時,以上三種代碼將被稱為嚴(yán)格全局代碼、嚴(yán)格 eval 代碼和嚴(yán)格函數(shù)代碼。當(dāng)符合以下條件時,代碼將被解析為嚴(yán)格模式下的代碼:
- 當(dāng) 全局代碼 以指令序言開始,且該指令序言包含一個使用嚴(yán)格模式的指令序言(參考 14.1 章 )時,即為嚴(yán)格全局代碼。
- 當(dāng) 全局代碼 以指令序言開始,且該指令序言包含一個使用嚴(yán)格模式的指令序言時;或者在 嚴(yán)格模式下的代碼 中通過直接調(diào)用 eval 函數(shù) (參考 15.1.2.1.1 章 )時,即為嚴(yán)格 eval 代碼。
- 當(dāng)一個 函數(shù)聲明 、 函數(shù)表達(dá)式 或 函數(shù)賦值 訪問器處在一段 嚴(yán)格模式下的代碼 中,或其函數(shù)代碼以指令序言開始,且該指令序言包含一個使用嚴(yán)格模式的指令序言時,該函數(shù)代碼 即為嚴(yán)格函數(shù)代碼。
- 當(dāng)調(diào)用內(nèi)置的 Function 構(gòu)造器時,如果最后一個參數(shù)所表達(dá)的字符串在作為 函數(shù)體 處理時以指令序言開始,且該指令序言包含一個使用嚴(yán)格模式的指令序言,則該 函數(shù)代碼即為嚴(yán)格函數(shù)代碼。
更多建議: