一文帶你了解一下JavaScript中什么是嚴(yán)格模式
前言
JavaScript 是一門(mén)動(dòng)態(tài)弱類(lèi)型的編程語(yǔ)言,同其他語(yǔ)言一樣,有它自身的語(yǔ)法,數(shù)據(jù)類(lèi)型,表達(dá)式。但是它有著一些缺陷,由于采用的是弱類(lèi)型,對(duì)使用的數(shù)據(jù)類(lèi)型未作出嚴(yán)格的要求,最初開(kāi)發(fā)時(shí)并未考慮周全及設(shè)計(jì)階段過(guò)于倉(cāng)促,相對(duì)于 Java,其設(shè)計(jì)簡(jiǎn)單緊湊,并未考慮到復(fù)雜應(yīng)用的需要。所以為了解決這個(gè)問(wèn)題,出現(xiàn)了嚴(yán)格模式。
什么是嚴(yán)格模式
嚴(yán)格模式是 ECMAScript 5 引入的一種運(yùn)行模式,可以讓 JavaScript 在更加嚴(yán)格的條件下運(yùn)行。該模式為 Js 定義了一種不同的解析與執(zhí)行。
ECMAScript 是由 Ecma 國(guó)際在標(biāo)準(zhǔn) ECMA-262 中定義的腳本語(yǔ)言規(guī)范,也可以理解為 JavaScript 的一個(gè)標(biāo)準(zhǔn)
它通過(guò)添加一個(gè)特定的編譯指示符(即 "use strict")來(lái)啟用。嚴(yán)格模式可以讓代碼中一些不安全的行為被禁用,從而使 JavaScript 引擎在執(zhí)行代碼時(shí)更加嚴(yán)格,更嚴(yán)格的條件去檢查開(kāi)發(fā)者的代碼錯(cuò)誤,減少出現(xiàn)潛在問(wèn)題的可能性,能讓我們的代碼更合理、更安全、更嚴(yán)謹(jǐn)。
<script> // 開(kāi)啟嚴(yán)格模式 "use strict"; x = 10 console.log(x) </script>
在控制臺(tái)打印過(guò)程中報(bào)錯(cuò)

它可以全局使用,也可以在局部中使用。如下面例子中在函數(shù)內(nèi)部使用嚴(yán)格模式:
x = 10
console.log(x)
function fun() {
"use strict";
y = 20
console.log(y)
}
fun()
未在嚴(yán)格模式下的 x 成功打印出來(lái),而在嚴(yán)格模式下 fun 函數(shù)里的 y 就會(huì)報(bào)錯(cuò)提示 y 沒(méi)有定義

作用
變量聲明
在正常模式中,一個(gè)變量沒(méi)有聲明賦值,該變量就提升為全局變量。而在嚴(yán)格模式中,變量一定要聲明。
"use strict"; let name = '小明' console.log(x) // error name = '小明' console.log(x) // name is not defined
禁止刪除變量
在正常模式中,可以使用 delete 來(lái)刪除變量。而在嚴(yán)格模式下,只能刪除對(duì)象屬性。
"use strict"; let a = 1 delete a // 'delete' cannot be called on an identifier in strict mode.
并且嚴(yán)格模式下,對(duì)刪除不可刪除屬性、對(duì)象只讀屬性進(jìn)行賦值、getter方法讀取的屬性進(jìn)行賦值等都會(huì)報(bào)錯(cuò)
函數(shù)參數(shù)
在嚴(yán)格模式下參數(shù)名不能重復(fù),Duplicate parameter name not allowed in this context 意思是 此上下文中不允許有重復(fù)的參數(shù)名稱(chēng)
"use strict";
function fun(name, name, name) { // Duplicate parameter name not allowed in this context
console.log(111)
}
函數(shù) this
在正常模式下,在全局調(diào)用情況中函數(shù)內(nèi)部的值為全局對(duì)象。在嚴(yán)格模式下,函數(shù)內(nèi)部的 this 值為 undefined
"use strict";
function fun() {
console.log(this); // 輸出 undefined
}
fun();
// 正常模式
function fun() {
console.log(this); // 輸出 window 對(duì)象
}
fun();
禁用 with
with 可以按序檢索的對(duì)象列表,通過(guò)它可以進(jìn)行變量名的解析。with 語(yǔ)句用于臨時(shí)拓展作用域鏈。
"use strict";
var obj = { name: '小明' };
with (obj) {
console.log(name); // 'with' statements are not allowed in strict mode.
}
禁用 eval
eval() 函數(shù)會(huì)計(jì)算 JavaScript 字符串,并把它作為腳本代碼來(lái)執(zhí)行。
eval("var x = 10");
arguments
arguments 傳遞進(jìn)函數(shù)的參數(shù)列表,它是一個(gè)類(lèi)數(shù)組對(duì)象,它的屬性名是按照傳入?yún)?shù)的順序列來(lái)的,既然是類(lèi)數(shù)組對(duì)象,就是它還有個(gè) length 屬性。在嚴(yán)格模式下,對(duì) arguments 有著一些限制。
嚴(yán)格模式下,arguments 不再追蹤參數(shù)的變化
"use strict";
function fun(name) {
name = '張三'
return [name, arguments[0]]
}
console.log(fun('小明')) // [ 張三 小明 ]
// 正常模式
function fun(name) {
name = '張三'
return [name, arguments[0]]
}
console.log(fun('小明')) // [ 張三 張三 ]
在正常模式下,打印 arguments
function fun(name) {
return arguments
}
console.log(fun('小明'))
如圖顯示 arguments 有著 callee 該屬性,該屬性是一個(gè)指針,指向擁有這個(gè) arguments 對(duì)象的函數(shù)。

而在嚴(yán)格模式下無(wú)法調(diào)用 callee
"use strict";
function fun(name) {
return arguments
}
console.log(fun('小明'))
callee 屬性中報(bào)錯(cuò),表示不能在嚴(yán)格模式函數(shù)或?qū)ζ溥M(jìn)行調(diào)用的arguments對(duì)象上訪(fǎng)問(wèn)“caller”、“callee”和“arguments”屬性

總結(jié)
嚴(yán)格模式讓我們的代碼更加規(guī)范,它可以幫助開(kāi)發(fā)者避免一些常見(jiàn)的錯(cuò)誤和降低代碼的不確定性,提高編譯器效率,增加運(yùn)行速度。它給我們代碼增加了一些限制和檢查,會(huì)對(duì)項(xiàng)目的代碼帶來(lái)一些影響,所以我們要根據(jù)項(xiàng)目決定是否來(lái)使用嚴(yán)格模式。
到此這篇關(guān)于一文帶你了解一下JavaScript中什么是嚴(yán)格模式的文章就介紹到這了,更多相關(guān)JavaScript嚴(yán)格模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
bootstrap table 多選框分頁(yè)保留示例代碼
在使用bootstrap table的復(fù)選框功能的時(shí)候,由于采用服務(wù)端分頁(yè),當(dāng)在第一頁(yè)選擇了某些數(shù)據(jù),然后點(diǎn)擊第二頁(yè)選擇一些數(shù)據(jù),再次點(diǎn)回第一頁(yè),發(fā)現(xiàn)原先選擇的數(shù)據(jù)已經(jīng)清空了,原來(lái)的多選框并不支持翻頁(yè)保留多選數(shù)據(jù),怎么解決呢,下面小編給大家分享下解決思路2017-03-03
JS實(shí)現(xiàn)DOM刪除節(jié)點(diǎn)操作示例
這篇文章主要介紹了JS實(shí)現(xiàn)DOM刪除節(jié)點(diǎn)操作,結(jié)合實(shí)例形式分析了javascript使用removeChild()操作頁(yè)面dom節(jié)點(diǎn)刪除功能的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04
簡(jiǎn)單談?wù)刯avascript代碼復(fù)用模式
這篇文章主要簡(jiǎn)單談?wù)刯avascript代碼復(fù)用模式,主要詳細(xì)介紹了類(lèi)式繼承模式中的默認(rèn)模式,希望大家能夠喜歡。2015-01-01
uniapp通過(guò)概率實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的項(xiàng)目實(shí)踐
在很多電商平臺(tái)或者活動(dòng)中,都會(huì)有類(lèi)似抽獎(jiǎng)贏優(yōu)惠券的功能,本文主要介紹了uniapp通過(guò)概率實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04
JS實(shí)現(xiàn)點(diǎn)擊顏色塊切換指定區(qū)域背景顏色的方法
這篇文章主要介紹了JS實(shí)現(xiàn)點(diǎn)擊顏色塊切換指定區(qū)域背景顏色的方法,涉及javascript操作cookie及背景色的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
JavsScript中Promise的錯(cuò)誤捕獲詳解
怎么捕獲錯(cuò)誤并且處理是一門(mén)語(yǔ)言必備的知識(shí),在JavaScript中也是如此,下面這篇文章主要給大家介紹了關(guān)于JavsScript中Promise錯(cuò)誤捕獲的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
JavaScript動(dòng)畫(huà)函數(shù)封裝詳解
動(dòng)畫(huà)的原理是通過(guò)定時(shí)器setInterval() 不斷移動(dòng)盒子位置。但是如果同時(shí)有好幾個(gè)元素都需要添加動(dòng)畫(huà)呢?我們就可以考慮將其封裝成一個(gè)簡(jiǎn)單的動(dòng)畫(huà)函數(shù)。本文將為大家介紹如何進(jìn)行封裝,需要的可以參考一下2021-12-12
原生JavaScript實(shí)現(xiàn)合并多個(gè)數(shù)組示例
這篇文章主要介紹了原生的JavaScript及jquery實(shí)現(xiàn)合并多個(gè)數(shù)組,很簡(jiǎn)單,很實(shí)用,大家可以看看2014-09-09

