深入淺析JavaScript中with語句的理解,淺析javascript

來源:互聯網
上載者:User

深入淺析JavaScript中with語句的理解,淺析javascript

JavaScript 有個 with 關鍵字, with 語句的原本用意是為逐級的對象訪問提供命名空間式的速寫方式. 也就是在指定的代碼地區, 直接通過節點名稱調用對象.

with語句的作用是暫時改變範圍鏈、減少的重複輸入。

其文法結構為:

with(object){ //statements } 

舉一個實際例子吧:

with(document.forms[]){ name.value = "lee king"; address.value = "Peking"; zipcode.value = ""; } 

與之對應的傳統的寫法是:

document.forms[].name.value = "lee king"; document.forms[].address.value = "Peking"; document.forms[].zipcode.value = ""; 

可以看出with語句的簡潔明了,不過在代碼的世界裡是很難找到真正的完美。

js的解譯器需要檢查with塊中的變數是否屬於with包含的對象,這將使with語句執行速度大大下降,並且導致js語句很難被最佳化。為了兼顧速度與代碼量可以找到一個比較折衷的方案:

var form = document.forms[]; form.name.value = "lee king"; form.address.value = "Peking"; form.zipcode.value = ""; 

所以在以後的高效代碼開發中我們應該儘可能的避免使用with語句。

經過測試:

var a = 123;var b = {a : 321};with(b){console.log(a); // 321}var a = 123;var b = {}; 這裡去掉b中的a屬性with(b){console.log(a); // 123}從範圍鏈來分析 

在javascript中,函數也是對象,實際上,javascript中的一切都是對象。函數內部有一個只給javascript引擎訪問的內部屬性是[[scope]],該屬性包含了函數建立時的範圍中對象的集合,這個集合就叫做範圍鏈。

比如下面代碼:

function add(num1,num2) { var sum = num1 + num2; return sum; } 

在函數建立時,它的範圍鏈中會填入一個全域對象,該全域對象包含了所有全域變數,如:

當函數被執行時,會建立一個使用中的物件,該對象包含了函數所有局部變數、具名引數以及this,然後該對象會被推入範圍鏈的前端,當函數執行完畢,該對象也隨之銷毀。

可以看到,全域變數會被使用中的物件推到範圍鏈的最後端,這也就是為什麼全域變數訪問速度慢的原因!

with

一般情況下,範圍鏈只會被with和catch語句影響。當使建立用with的時候,函數會建立一個新的使用中的物件,推到最前端,該對象就是with的對象。這就意味著所有的局部變數都處於第二個範圍鏈對象中去了,這也就是為什麼要避免使用with的原因。

以上所述是小編給大家介紹的JavaScript中with語句的理解,希望對大家有所協助,如果大家想瞭解更多資訊敬請關注幫客之家網站!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.