es5嚴(yán)格模式(“use strict”)學(xué)習(xí)筆記

  • 最近在看一些框架源代碼的時(shí)候看見(jiàn)好多都在代碼開(kāi)頭用了“use strict”,自己不是很了解,就查閱相關(guān)資料學(xué)習(xí)了一下,做了一下筆記。
  • 嚴(yán)格模式就是讓javascript在更嚴(yán)格的條件下運(yùn)行。
  • 其目的有以下幾個(gè):
    1. 消除javascript語(yǔ)法的不嚴(yán)謹(jǐn)和一些不合理之處,減少一些怪異行為。
    2. 消除代碼運(yùn)行的不安全之處,保證代碼的運(yùn)行安全。
    3. 提高編譯器的效率,增加編譯速度。
    4. 為未來(lái)新版本的javascript做好鋪墊。
    
  • 同樣的代碼在嚴(yán)格模式下可能會(huì)有不一樣的運(yùn)行結(jié)果,一些在正常模式下可以運(yùn)行的代碼語(yǔ)句,在嚴(yán)格模式下可能將不能運(yùn)行,掌握這些內(nèi)容將有助于更細(xì)致深入的了解javascript,提升代碼水平。
  • 進(jìn)入標(biāo)志就是 "use strict";老版本那些不支持的瀏覽器會(huì)把他當(dāng)做一串普通的字符串處理。
  • 有兩種調(diào)用方法:
    1. 針對(duì)整個(gè)腳本文件,放在腳本文件的第一行。
    2. 針對(duì)單個(gè)函數(shù),將"use strict"放在函數(shù)體的第一行,則整個(gè)函數(shù)以“嚴(yán)格模式”運(yùn)行。
    3. 由于第一種方法不利于文件合并,所以更好的做法是借用第二種方法,將整個(gè)腳本文件放在一個(gè)立即執(zhí)行的匿名函數(shù)當(dāng)中。
    
    (function () {
        "use strict";
        // some code here
      })
    
  • 嚴(yán)格模式對(duì)javascript的語(yǔ)法和行為都做了一些改變:
    1. 全局變量要顯示的聲明,否則會(huì)報(bào)錯(cuò);必須先聲明變量然后再使用。
    2. 靜態(tài)綁定:
        a):禁止使用with語(yǔ)句
        b):正常模式下javascript語(yǔ)言有兩種作用域(scope),即全局作用域和函數(shù)作用域。嚴(yán)格模式創(chuàng)建了第三種作用域,eval作用域。正常模式下,eval語(yǔ)句的作用域取決于它本身是處在全局作用域還是函數(shù)作用域。嚴(yán)格模式下eval本身就是一個(gè)作用域,不在能夠生成全局變量了,他所生成的變量只能用于自身內(nèi)部。
    
  • 增強(qiáng)的安全措施:
    1. 禁止this關(guān)鍵字指向全局對(duì)象。
    2. 禁止在函數(shù)內(nèi)部遍歷調(diào)用棧。
        ```
             function f1(){
                      " use strict";
                        f1.caller; //報(bào)錯(cuò)
                         f1.arguments; //報(bào)錯(cuò)
                }
        ```
    
  • 禁止刪除變量:嚴(yán)格模式下將不能刪除變量,只有configurable設(shè)置為true的才能刪除。
  • 顯式報(bào)錯(cuò)
  • 重名錯(cuò)誤:
    1. 對(duì)象不能有重名的屬性
    2. 函數(shù)不能有重名的函數(shù)
    
  • 禁止八進(jìn)制表示法
  • arguments的限制:
    1.不允許對(duì)arguments進(jìn)行賦值。
    2. 不再追蹤參數(shù)的變化。
    3. 禁止使用arguments.callee,無(wú)法在匿名函數(shù)內(nèi)部調(diào)用自身了
    
  • 函數(shù)必須聲明在頂層
  • 增加了一些保留字,用這些保留字命名變量將會(huì)報(bào)錯(cuò)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容