深入淺析javascript函數(shù)中with
/*js函數(shù)中with函數(shù)的用法分析
定義 方便用來(lái)引用某個(gè)對(duì)象中已有的屬性
但是不能用來(lái)給對(duì)象添加屬性 要給對(duì)象創(chuàng)建
新的屬性 必須明確的引用該對(duì)象*/
代碼格式
with(object) statements
object:新的默認(rèn)對(duì)象
statements:一個(gè)或多個(gè)語(yǔ)句 oject是該語(yǔ)句的默認(rèn)對(duì)象
with 語(yǔ)句通常用來(lái)縮短特定情形下必須寫(xiě)的代碼量。
x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10) y = Math.tan(14 * Math.E) with (Math){ x = cos(3 * PI) + sin (LN10) y = tan(14 * E)} function valiadate_reauired
簡(jiǎn)單的來(lái)說(shuō)就是with相當(dāng)于一種速寫(xiě)方式 在指定的代碼區(qū)域,通過(guò)節(jié)點(diǎn)名稱就能調(diào)用對(duì)象
普通寫(xiě)法:
var car={ size: suv, color:yellow, money:1500 };
其他類調(diào)用
function={ car car =new car(); car.size=suv; car.color=yellow; car.money=1500; }
使用with的寫(xiě)法:省去了car.
with(car){ size=suv; color=yellow; money=1500; }
使用with語(yǔ)句關(guān)聯(lián)了car對(duì)象,解析時(shí) with代碼塊的內(nèi)部把每個(gè)變量都認(rèn)為是局部變量;
如果局部變量里與car對(duì)象屬性(例如size)屬性同名,這個(gè)局部變量就會(huì)指向car里面的屬性;
缺點(diǎn)1
with會(huì)自動(dòng)在全局作用域創(chuàng)建一個(gè)全局變量,在嚴(yán)格模式下,會(huì)拋出ReferenceError 異常。
withwith 會(huì)在運(yùn)行時(shí)修改或創(chuàng)建新的作用域,以此來(lái)欺騙其他在書(shū)寫(xiě)時(shí)定義的詞法作用域。
缺點(diǎn)2
with在相同條件下比不使用它慢了很多,具體的原因是因?yàn)閖s在運(yùn)行之前要進(jìn)行預(yù)編譯,其中有些優(yōu)化依賴于能夠根據(jù)代碼的詞法進(jìn)行靜態(tài)分析,并預(yù)先確定所有變量和函數(shù)的定義位置,才能在執(zhí)行過(guò)程中快速找到標(biāo)識(shí)符。
但如果引擎在代碼中發(fā)現(xiàn)了 with,它只能簡(jiǎn)單地假設(shè)關(guān)于標(biāo)識(shí)符位置的判斷都是無(wú)效的,因?yàn)闊o(wú)法知道傳遞給 with 用來(lái)創(chuàng)建新詞法作用域的對(duì)象的內(nèi)容到底是什么。所以js就不會(huì)優(yōu)化
總結(jié)
以上所述是小編給大家介紹的javascript函數(shù)中with,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
javascript 原型與原型鏈的理解及實(shí)例分析
這篇文章主要介紹了javascript 原型與原型鏈的理解,結(jié)合實(shí)例形式分析了javascript 原型與原型鏈的原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-11-11javascript json字符串到j(luò)son對(duì)象轉(zhuǎn)義問(wèn)題
今天小編就為大家分享一篇關(guān)于javascript json字符串到j(luò)son對(duì)象轉(zhuǎn)義問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01JS實(shí)現(xiàn)帶有抽屜效果的產(chǎn)品類網(wǎng)站多級(jí)導(dǎo)航菜單代碼
這篇文章主要介紹了JS實(shí)現(xiàn)帶有抽屜效果的產(chǎn)品類網(wǎng)站多級(jí)導(dǎo)航菜單代碼,涉及JavaScript動(dòng)態(tài)操作頁(yè)面元素屬性的技巧,整體界面效果美觀大方,具有極強(qiáng)的立體感,需要的朋友可以參考下2015-09-09一文帶你快速理解JavaScript中call()函數(shù)的使用
這篇文章主要為大家詳細(xì)介紹了JavaScript中call()函數(shù)的使用的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下2023-03-03js中addEventListener()與removeEventListener()用法案例分析
這篇文章主要介紹了js中addEventListener()與removeEventListener()用法,結(jié)合實(shí)例形式分析了js中addEventListener()與removeEventListener()基本功能、用法與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03layui當(dāng)點(diǎn)擊文本框時(shí)彈出選擇框,顯示選擇內(nèi)容的例子
今天小編就為大家分享一篇layui當(dāng)點(diǎn)擊文本框時(shí)彈出選擇框,顯示選擇內(nèi)容的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09js提示框替代系統(tǒng)alert,自動(dòng)關(guān)閉alert對(duì)話框的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇js提示框替代系統(tǒng)alert,自動(dòng)關(guān)閉alert對(duì)話框的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11