JavaScript嚴格模式

JavaScript嚴格模式的使用是規範js代碼的一種行爲,它對代碼提出了更高的要求,會對代碼進行錯誤檢查,使js代碼更加具備健壯性、安全性。安全

咱們平時使用的是通常模式。要進入嚴格模式,能夠在js文件開頭寫上函數

'use strict';

或者在函數開頭寫上這一句,從而使得函數內部進入嚴格模式。從這裏咱們能夠看出,函數內部具備本身的做用域。spa

提及做用域,js的做用域能夠分爲全局做用域、函數做用域和eval的獨立做用域,雖然ES5沒有塊級做用域的說法,可是塊級做用域在ES6用let實現了。code

嚴格模式是向上兼容的。對象

這裏介紹幾個嚴格模式下的要求:blog

1.不容許使用with。緣由是with寫出來的代碼可讀性差,不推薦使用。(with裏的代碼塊能夠直接使用傳入的對象的屬性)ip

2.不容許未被聲明的變量被賦值。這點是爲了防止變量在不經意間自動提高爲全局變量。如作用域

var a = b = 1

這句代碼中b就被自動提高爲全局變量。字符串

3.arguments變爲參數的靜態副本。it

以下面的示例,通常模式輸出100,嚴格模式輸出1。

'use strict'
function f(a){
    arguments[0] = 100
    return a
}
document.write(f(1))

4.使用運算符delete刪除一些不能夠刪除的東西(如參數、函數名、不可配置的屬性等)報錯。(delete本來是用來刪除對象的屬性的。)

5.對象字面量重複屬性名報錯。

6.禁止使用八進制字面量,如

var a = 0123
console.log(a)

在通常模式下輸出十進制數83,而嚴格模式下則報錯。

7.eval、arguments變爲了關鍵字,不能用於函數名、變量。

8.eval函數具備了獨立做用域。(eval() 函數可計算某個字符串,並執行其中的的 JavaScript 代碼。)

eval('var b = 2;')
console.log(b)

在通常模式下輸出2,而嚴格模式下則報錯。

相關文章
相關標籤/搜索