/*js函數中with函數的用法分析
定義 方便用來引用某個對象中已有的屬性
但是不能用來給對象添加屬性 要給對象創建
新的屬性 必須明確的引用該對象*/
代碼格式
with(object)
statements
object:新的默認對象
statements:一個或多個語句 oject是該語句的默認對象
with 語句通常用來縮短特定情形下必須寫的代碼量。
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
簡單的來說就是with相當於一種速寫方式 在指定的代碼區域,通過節點名稱就能調用對象
普通寫法:
var car={
size: suv,
color:yellow,
money:1500
};
其他類調用
function={
car car =new car();
car.size=suv;
car.color=yellow;
car.money=1500;
}
使用with的寫法:省去了car.
with(car){
size=suv;
color=yellow;
money=1500;
}
使用with語句關聯了car對象,解析時 with代碼塊的內部把每個變量都認為是局部變量;
如果局部變量里與car對象屬性(例如size)屬性同名,這個局部變量就會指向car里面的屬性;
本文參考https://blog.csdn.net/zwkkkk1/article/details/79725934來詳細理解with 的缺點
缺點1
with會自動在全局作用域創建一個全局變量,在嚴格模式下,會拋出ReferenceError 異常。
withwith 會在運行時修改或創建新的作用域,以此來欺騙其他在書寫時定義的詞法作用域。
缺點2
with在相同條件下比不使用它慢了很多,具體的原因是因為js在運行之前要進行預編譯,
其中有些優化依賴於能夠根據代碼的詞法進行靜態分析,並預先確定所有變量和函數的定義位置,
才能在執行過程中快速找到標識符。
但如果引擎在代碼中發現了 with,它只能簡單地假設關於標識符位置的判斷都是無效的,
因為無法知道傳遞給 with 用來創建新詞法作用域的對象的內容到底是什么。所以js就不會優化