1. 程式人生 > >ES6 嚴格模式

ES6 嚴格模式

ES6 的模組自動採用嚴格模式,不管你有沒有在模組頭部加上"use strict";

嚴格模式主要有以下限制。

  • 變數必須聲明後再使用
  • 函式的引數不能有同名屬性,否則報錯
  • 不能使用with語句
  • 不能對只讀屬性賦值,否則報錯
  • 不能使用字首0表示八進位制數,否則報錯
  • 不能刪除不可刪除的屬性,否則報錯
  • 不能刪除變數delete prop,會報錯,只能刪除屬性delete global[prop]
  • eval不會在它的外層作用域引入變數
  • evalarguments不能被重新賦值
  • arguments不會自動反映函式引數的變化
  • 不能使用arguments.callee
  • 不能使用arguments.caller
  • 禁止this指向全域性物件
  • 不能使用fn.callerfn.arguments獲取函式呼叫的堆疊
  • 增加了保留字(比如protectedstaticinterface
  •  
  • 其中,尤其需要注意this的限制。ES6 模組之中,頂層的this指向undefined,即不應該在頂層程式碼使用this

ES6嚴格模式需要注意的地方

 1. 塊級函式

"use strict";

  if (true) {

    function f() { } // 語法錯誤

  }

es5中嚴格模式下禁止宣告塊級函式,而在es6的嚴格模式中可以宣告塊級函式,並可以在塊級作用

 'use strict'
 var b= true;
 if(b){
   function test(){
     console.log('我是塊級函式')
   }
   test(); //可以正常執行
 }
 console.log(typeof test) //塊級作用域外無法訪問

2. 箭頭函式

箭頭函式是es6中新增的一種特殊函式,不管是否處於嚴格模式下,箭頭函式的引數都不能有同名的。而ES5中,只有在嚴格模式下函式的引數才不能有同名

3.字面量物件重複屬性問題

es5的嚴格模式中,如果物件屬性重名則會報錯,es6則不管是不是嚴格模式,如果有同名屬性,則後面的屬性覆蓋前面的

4.模組模式

採用es6的模組化開發時,程式碼自動執行在嚴格模式下且沒有任何辦法跳出嚴格模式

5.類模式

在es6中不管是類宣告還是類表示式,其內部使用的都是嚴格模式。