1. 程式人生 > >詳解Javascript函式中with

詳解Javascript函式中with

Javascript函式中with,with函式方便用來引用某個物件中已有的屬性,但是不能用來給物件新增屬性,要給物件建立新的屬性,下面通過程式碼給大家講解。

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
 };//歡迎加入全棧開發交流圈一起學習交流:864305860

其他類呼叫

function={
 car car =new car();
 car.size=suv;
 car.color=yellow;
 car.money=1500;
 }//歡迎加入全棧開發交流圈一起學習交流:864305860

使用with的寫法:省去了car.

with(car){
size=suv;
 color=yellow;
 money=1500; 
 }//歡迎加入全棧開發交流圈一起學習交流:864305860

使用with語句關聯了car物件,解析時 with程式碼塊的內部把每個變數都認為是區域性變數;
如果區域性變數裡與car物件屬性(例如size)屬性同名,這個區域性變數就會指向car裡面的屬性;
缺點1

  • with會自動在全域性作用域建立一個全域性變數,在嚴格模式下,會丟擲ReferenceError 異常。
  • withwith 會在執行時修改或建立新的作用域,以此來欺騙其他在書寫時定義的詞法作用域。
    缺點2
  • with在相同條件下比不使用它慢了很多,具體的原因是因為js在執行之前要進行預編譯,其中有些優化依賴於能夠根據程式碼的詞法進行靜態分析,並預先確定所有變數和函式的定義位置,才能在執行過程中快速找到識別符號。
  • 但如果引擎在程式碼中發現了 with,它只能簡單地假設關於識別符號位置的判斷都是無效的,因為無法知道傳遞給 with 用來建立新詞法作用域的物件的內容到底是什麼。所以js就不會優化
    結語

感謝您的觀看,如有不足之處,歡迎批評指正。