javascript
为什么有时优盘是只读模式_JS专题之严格模式
ECMAScript 5 引入了 strict mode ,現(xiàn)在已經(jīng)被大多瀏覽器實(shí)現(xiàn)(從IE10開始)
一、什么是嚴(yán)格模式
顧名思義,JavaScript 嚴(yán)格模式就是讓 JS 代碼以更嚴(yán)格的模式執(zhí)行,不允許可能會(huì)引發(fā)錯(cuò)誤的代碼執(zhí)行。在正常模式下靜默失敗的代碼,嚴(yán)格模式下就會(huì)拋出錯(cuò)誤。
二、為什么要過(guò)渡到嚴(yán)格模式
三、如何使用
· 腳本文件范圍
將 "use strict"; 放在腳本文件的第一行。整個(gè)腳本文件就會(huì)以“嚴(yán)格模式”執(zhí)行。· 函數(shù)作用域范圍
將 "use strict"; 放在函數(shù)體的第一行,則整個(gè)函數(shù)以"嚴(yán)格模式"運(yùn)行。文件合并時(shí),寫在腳本文件第一行的 "use strict"; 來(lái)實(shí)現(xiàn)嚴(yán)格模式會(huì)失效,可以將腳本文件的代碼放在一個(gè)立即執(zhí)行表達(dá)式中。
(funciton() {"use strict";... })()四、嚴(yán)格模式的具體定義
嚴(yán)格模式下,必須指明 this 的指向?qū)ο蟆H绻麤](méi)有指明的話,this的值為 undefined
var name = "foo"; function func() {"use strict";this.name; // Uncaught TypeError: Cannot read property 'name' of undefined } func(); // 沒(méi)有加 new 關(guān)鍵字 new func(); ? function func() {return this } ? func() // window func.call(8) // Number {8} func.call(true) // Boolean {true} func.call("abcd") // {"abcd"} func.call(null) // window func.call(undefined) // window ? "use strict" function func() {return this } ? func() // undefined func.call(8) // 8 func.call(true) // true func.call(null) //null func.call(undefined) // undefined在正常模式中,給對(duì)象的只讀屬性賦值, 刪除對(duì)象的不可設(shè)置屬性,添加不可擴(kuò)展對(duì)象的新屬性,會(huì)靜默失敗。
但是在嚴(yán)格模式中,會(huì)拋出錯(cuò)誤。 另外,字符串的屬性 length 也是只讀屬性,修改后會(huì)報(bào)錯(cuò)。
"use strict"; var str = "abc" str.length = 8 // Uncaught TypeError: Cannot assign to read only property 'length' of string 'abc' ? 'use strict'; var obj = Object.defineProperty({}, 'a', {value: 37,writable: false }); obj.a = 123; // Uncaught TypeError: Cannot assign to read only property 'a' of object '# ? 'use strict'; var obj = Object.defineProperty({}, 'p', {value: 37,configurable: false }); delete obj.p // Uncaught TypeError: Cannot delete property 'p' of #<Object> ? var obj = {}; Object.preventExtensions(obj); obj.title = "hello"; // Uncaught TypeError: Cannot add property title, object is not extensibleeval 關(guān)鍵字不再會(huì)給上層函數(shù)(surrounding function)或者全局引入一個(gè)新的變量。在嚴(yán)格模式中,eval 語(yǔ)句會(huì)創(chuàng)建自己的一個(gè)作用域,eval 里的變量只能在 eval 內(nèi)部使用。
正常模式中,對(duì)參數(shù)重新賦值,會(huì)修改 arguments 類數(shù)組對(duì)象下的參數(shù)值。同時(shí),修改 arguments 類數(shù)組對(duì)象的值,也會(huì)修改函數(shù)參數(shù)的值。
嚴(yán)格模式下,不僅參數(shù)的值不會(huì)隨著 arguments 類數(shù)組對(duì)象的變化而變化,參數(shù)的變化也不會(huì)引起 arguments 對(duì)象的變化,arguments 對(duì)象會(huì)記住參數(shù)的傳入初始值。
function func(a) { "use strict"a = 8;// arguments[0] = 8return [a, arguments[0]] } ? func(3) // [8, 3] ? function func(a) { "use strict"arguments[0] = 8return [a, arguments[0]] } ? func(3) // [3, 8]五、向嚴(yán)格模式過(guò)渡
嚴(yán)格模式能夠幫助我們寫出更安全,更有規(guī)范的代碼,則應(yīng)該避免一些危險(xiǎn)的寫法,采用更好的寫法:
六、嚴(yán)格模式的缺點(diǎn)
總結(jié)
現(xiàn)在的 webpack 會(huì)在打包的時(shí)候默認(rèn)是嚴(yán)格模式,所以現(xiàn)在不用再手動(dòng)寫 use strict了。嚴(yán)格模式能幫助我們以更規(guī)范的方式書寫代碼,但是無(wú)論是否嚴(yán)格模式,都應(yīng)該注意代碼的規(guī)范,避免隱式 bug 的出現(xiàn)。
2018/02/08 @Starbucks歡迎關(guān)注我的個(gè)人公眾號(hào)“謝南波”,專注分享原創(chuàng)文章。
總結(jié)
以上是生活随笔為你收集整理的为什么有时优盘是只读模式_JS专题之严格模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 给图片下方加水印_别再看不起美图秀秀啦,
- 下一篇: gradle idea java ssm