日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

java严格模式_“use strict” 严格模式使用(前端基础系列)

發(fā)布時間:2024/9/27 HTML 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java严格模式_“use strict” 严格模式使用(前端基础系列) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ECMAscript5添加一種嚴(yán)格模式的運(yùn)行模式("use strict"),讓你的js語句在更加嚴(yán)格的環(huán)境下進(jìn)行運(yùn)行;

一、主要作用:

消除版本javascript中一些不合理及不嚴(yán)謹(jǐn)之處,減少怪異行為

提高編譯效率,提高運(yùn)行速度

為新版本的javasript做鋪墊兼容

二、如何使用

啟動嚴(yán)格模式的標(biāo)志就是,在開頭第一行中添加"use strict"字符串,在低版本的瀏覽器,或是說js引擎中,只是把這個標(biāo)志當(dāng)做一句字符串而已,而支持ES5的瀏覽器會進(jìn)行啟動“嚴(yán)格模式”;具體有兩種調(diào)用方式:

針對整個腳本文件有效

在js文件的第一行中添加"use strict",或是在

"use strict";//嚴(yán)格模式

//do something

//非嚴(yán)格模式

//do something

針對單個函數(shù)有效

將 "use strict" 放在函數(shù)的第一行,則整個函數(shù)有效

functionstrict(){"use strict";//嚴(yán)格模式

//do something

}

更加通用的寫法,由于第一種方法,不利于文件的合并,根據(jù)針對函數(shù)的形式,可以將腳本文件包裹在一個自執(zhí)行的匿名函數(shù)中,這樣相當(dāng)于所有語句都在一個嚴(yán)格模式的函數(shù)中執(zhí)行

(function(){"use strict";//嚴(yán)格模式

//do something

}())

三、語法與行為變更

全局變量的顯示聲明

正常模式下,對于使用沒有進(jìn)行聲明的變量,編譯時默認(rèn)改變量為全局變量(添加到window對象的屬性中,可以使用delete進(jìn)行刪除),而嚴(yán)格模式下進(jìn)行了限制,使用變量前必須聲明(var/let/const);

functionstrict(){"use strict";

name= "ukerxi";

console.log(name);

}functionnoStrict(){

name= "ukerxi";

console.log(name);

}//執(zhí)行函數(shù)

strict(); //報 Uncaught ReferenceError: name is not defined(引用錯誤)

noStrict(); //==> 'ukerxi'

禁止使用with語句

正常模式下with語句允許當(dāng)前代碼執(zhí)行在新的變量對象中,即改變了執(zhí)行環(huán)境;在嚴(yán)格模式下,已經(jīng)禁止使用with語句,由于只有運(yùn)行時才知道語句的執(zhí)行環(huán)境,所以執(zhí)行非常耗時緩慢;

var foo ={

name:"ukerxi",

hobby:'no'};with(foo){

console.log(name);//==> 'ukerxi'

}創(chuàng)設(shè)eval的作用域

正常模式下,Javascript語言有兩種變量作用域(scope):全局作用域和函數(shù)作用域。嚴(yán)格模式創(chuàng)設(shè)了第三種作用域:eval作用域。

正常模式下,eval語句的作用域,取決于它處于全局作用域,還是處于函數(shù)作用域。嚴(yán)格模式下,eval語句本身就是一個作用域,不再能夠生成全局變量了,它所生成的變量只能用于eval內(nèi)部;

"use strict";var name = 'ukerxi';

eval('var name = "originEval";');

console.log(name);//==> "ukerxi"

但是存在一種情況,就是當(dāng)你使用變量進(jìn)行緩存eval函數(shù)時,再使用緩存變量進(jìn)行執(zhí)行操作,會產(chǎn)生正常模式下執(zhí)行eval函數(shù)的效果(暫時不知道這個bug是語言本身的設(shè)計,還是其他原因?qū)е碌?

"use strict";var name = 'ukerxi';var globalEval = eval; //緩存一個全局的eval函數(shù)

eval('var name = "originEval";');

console.log(name);//==> "ukerxi"

//使用緩存進(jìn)行執(zhí)行函數(shù),會導(dǎo)致變更作用域

globalEval('var name = "globalEval";');

console.log(name);//==> "globalEval"禁止this執(zhí)行全局對象,默認(rèn)指向undefined

"use strict";

console.log(this); //==> undefined

禁止使用arguments.caller和arguments.callee進(jìn)行調(diào)用自身及被調(diào)用函數(shù)

"use strict";functiontestHandle(){

console.log(arguments.caller);//報錯

console.log(arguments.callee); //報錯

}

禁止修改arguments變量參數(shù)對象,arguments不再追蹤參數(shù)的變化

"use strict";functiontestHandle(){

arguments= "test"; //報語法錯誤

}

禁止刪除變量

"use strict";var name = "ukerxi";delete name; //報錯

重名錯誤(函數(shù)參數(shù)重名&&對象重名屬性)

"use strict";//屬性重名報錯

var testObj ={

name:"ukerxi",

name:"test"};//參數(shù)重名報錯

functiontestHandle(a, a, b){//do something

}

禁止八進(jìn)制表示法

"use strict";var n = 0100; //語法錯誤

函數(shù)必須聲明在頂層

Javascript的新版本會引入"塊級作用域"。為了與新版本接軌,嚴(yán)格模式只允許在全局作用域或函數(shù)作用域的頂層聲明函數(shù)。也就是說,不允許在非函數(shù)的代碼塊內(nèi)聲明函數(shù)

"use strict";if (true) {function f() { } //語法錯誤

}for (var i = 0; i < 5; i++) {function f2() { } //語法錯誤

}

針對對象的操作,對于聲明只讀屬性的對象不可修改,刪除不可刪除的屬性報錯

"use strict";var foo ={};//只讀屬性的對象不可修改

Object.defineProperty(foo, "v", { value: 1, writable: false});

foo.v= 2; //報錯

//刪除不可刪除的屬性報錯

delete Object.prototype; //報錯

//嚴(yán)格模式下,對一個使用getter方法讀取的屬性進(jìn)行賦值,會報錯

var foo1 ={

get v() {return 1; }

};

foo1.v= 2; //報錯

//嚴(yán)格模式下,對禁止擴(kuò)展的對象添加新屬性,會報錯。

var foo2 ={};

Object.preventExtensions(foo2);

foo2.v= 2; //報錯

保留字

為了向?qū)鞪avascript的新版本過渡,嚴(yán)格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。(主要是與類有關(guān)的保留字,和java類的關(guān)鍵字)

【參考鏈接】

【結(jié)束語】

系列文章,包括了原創(chuàng),翻譯,轉(zhuǎn)載等各類型的文章;一方面是為了自己總結(jié),另一方面頁希望可以共享知識;在技術(shù)方面有輸入,也要有所輸出,才能更進(jìn)一步!文章基于自己的實踐、閱讀及理解,如有不合理及錯誤的地方,煩請各大佬評論指出,以便改正,感謝!

總結(jié)

以上是生活随笔為你收集整理的java严格模式_“use strict” 严格模式使用(前端基础系列)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。