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