?with
作用域只有全局作用域和函數(shù)作用域(塊作用域暫時不提及), 使用with后有一個單獨的作用域。不建議使用with語句,因為它可能是混淆錯誤和兼容性問題的根源。
var message = "hello";
var obj = {
name: "malong",
message:"malong obj"
}
// 使用with 后會形成一個單獨的作用域
with(obj) {
console.log(message) //會打印 malong obj
}
eval
eval是一個特殊的函數(shù),它可以將傳入的字符串當(dāng)做JavaScript代碼來運行。文章來源:http://www.zghlxwxcb.cn/news/detail-847549.html
- 不建議在開發(fā)中使用eval
- 可讀性很差
- 存在安全問題,eval是一個字符串,在執(zhí)行的過程中如果被惡意篡改,會造成安全問題
- eval的執(zhí)行必須經(jīng)過JS解釋器,不能被JS引擎優(yōu)化
var str = ' var msg = "test"; console.log("malong" + msg)' eval(str)
嚴(yán)格模式 ues strict
嚴(yán)格模式很好理解,是一種具有限制性的JavaScript模式,從而使代碼隱式的脫離了 ”懶散(sloppy)模式“。支持嚴(yán)格模式的瀏覽器在檢測到代碼中有嚴(yán)格模式時,會以更加嚴(yán)格的方式對代碼進(jìn)行檢測和執(zhí)行;文章來源地址http://www.zghlxwxcb.cn/news/detail-847549.html
- 嚴(yán)格模式分類
- 全局嚴(yán)格
- 局部嚴(yán)格
- 嚴(yán)格模式的好處
- 消除代碼運行的一些不安全之處,保證代碼運行的安全;
- 提高編譯器效率,增加運行速度;
- 消除Javascript語法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為;
- 嚴(yán)格模式對JavaScript語義進(jìn)行了一些限制
- 嚴(yán)格模式通過拋出錯誤來消除一些原有的靜默(silent)錯誤
- 嚴(yán)格模式讓JS引擎在執(zhí)行代碼的時候得到更多的優(yōu)化(不需要對特殊的代碼進(jìn)行處理)
- 嚴(yán)格模式禁用了在ECMAScript未來版本中可能會定義的一些語法
- 嚴(yán)格模式具體的一些限制
-
- 無法意外的創(chuàng)建全局變量
-
- 嚴(yán)格模式會使引起靜默失敗(silently fail,注:不報錯也沒有任何效果)的賦值操作拋出異常
-
- 嚴(yán)格模式下試圖刪除不可刪除的屬性
-
- 嚴(yán)格模式不允許函數(shù)參數(shù)有相同的名稱
-
- 不允許0的八進(jìn)制語法
-
- 在嚴(yán)格模式下,不允許使用with
-
- 在嚴(yán)格模式下,eval不再為上層引用變量
-
- 嚴(yán)格模式下,this綁定不會默認(rèn)轉(zhuǎn)成對象
- 嚴(yán)格模式下,setTimeout中的this還是指向window,這跟瀏覽器有關(guān),有想研究的可以看一下瀏覽器源碼,文件很大。而且對于我們來說,setTimeout是怎么執(zhí)行的我們也不知道,這種我們稱為黑盒子,但是其實我的猜想是通過apply調(diào)用觸發(fā)的函數(shù)的自執(zhí)行。
-
到了這里,關(guān)于JavaScript高級(六)---with和eval函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!