Louis's blog
GitHub
GitHub
  • 瀏覽器運作原理
  • 閉包
  • this
  • arguments 和 array-like
  • apply、call、bind
  • 函式程式設計
  • 物件和原型
  • 原型鏈和繼承
  • ES6 和 Class
  • ES6 中新增的數據類型
  • ES6 語法糖
  • var、let、const
  • ES7~ES12
  • Strict Mode
  • 補充
  • Proxy 和 Reflect
  • Promise
  • Iterator
  • 生成器
  • async、await
  • Event loop
  • 錯誤處理
  • 模塊化
  • 套件管理工具
  • JSON
  • WebStorage
  • IndexDB
  • Cookie
  • BOM
  • DOM
  • 防抖(debounce)和節流(throttle)
  • Deep copy
  • 事件總線

Strict Mode

在 ES5 中,JavaScript 提出了一個嚴格模式的概念:

嚴格模式是一種具有限制性的 JavaScript 模式,支持嚴格模式的瀏覽器在檢測到程式碼中有嚴格模式時,會以更加嚴格的方式進行檢測和執行。

通常會達到以下這些功能:

  • 通過拋出錯誤來消除一些原有的靜默 ( silent ) 錯誤。

  • JS 引擎可以在執行時做出更多的優化 (不需要對特殊的語法進行處理)。

  • 禁用了一些 ECMAScript 可能會在未來版本中定義的一些語法錯誤。

嚴格模式有兩種方式開啟——

在文件最上面的位置加上 use strict,而啟用的嚴格模式只會針對該文件:

'use strict'

message = 'Hello World'
console.log(message)

true.ooo = 'ijiji'

或者是在函數內部加上 use strict,嚴格模式就會只在該函數的作用域內執行:

function foo() {
  'use strict'

  true.foo = '123'
}

foo()

嚴格模式下常見的限制

不允許以下這種方式創建全局變數:

function foo() {
  age = 300
}

foo()

不允許函數有相同的參數名稱:

function foo(x, y, x) {
  console.log(x, y, x)
}

對靜默錯誤進行報錯:

// 靜默錯誤
true.name = 'abc'
NanN = 123

不允許八進制

var num = 0123

不允許使用 with 語句:

var obj = {
  message: 'Hello Obj'
}

function bar() {
  with (obj) {
    console.log(message)
  }
}
bar()

eval 函數不會向上引用變數:

var str = 'var message = "Hello World"; console.log(message);'

eval(str)

console.log(message)

嚴格模式下普通函數默認指向 undefined:

function foo() {
  console.log(this)
}

foo()
Edit this page
Last Updated:
Contributors: louis, louis61619
Prev
ES7~ES12
Next
補充