欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年05月12日 14:05:43   作者:sarah  
JavaScript 有個 with 關鍵字, with 語句的原本用意是為逐級的對象訪問提供命名空間式的速寫方式。這篇文章主要介紹了JavaScript中with語句的相關知識,感興趣的朋友一起學習吧

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

with語句的作用是暫時改變作用域鏈、減少的重復輸入。

其語法結構為:

with(object){ 
//statements 
} 

舉一個實際例子吧:

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

與之對應的傳統(tǒng)的寫法是:

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

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

js的解釋器需要檢查with塊中的變量是否屬于with包含的對象,這將使with語句執(zhí)行速度大大下降,并且導致js語句很難被優(yōu)化。為了兼顧速度與代碼量可以找到一個比較折衷的方案:

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

所以在以后的高效代碼開發(fā)中我們應該盡可能的避免使用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]],該屬性包含了函數創(chuàng)建時的作用域中對象的集合,這個集合就叫做作用域鏈。

比如下面代碼:

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

在函數創(chuàng)建時,它的作用域鏈中會填入一個全局對象,該全局對象包含了所有全局變量,如下圖:

當函數被執(zhí)行時,會創(chuàng)建一個活動對象,該對象包含了函數所有局部變量、命名參數以及this,然后該對象會被推入作用域鏈的前端,當函數執(zhí)行完畢,該對象也隨之銷毀。

可以看到,全局變量會被活動對象推到作用域鏈的最后端,這也就是為什么全局變量訪問速度慢的原因!

with

一般情況下,作用域鏈只會被with和catch語句影響。當使創(chuàng)建用with的時候,函數會創(chuàng)建一個新的活動對象,推到最前端,該對象就是with的對象。這就意味著所有的局部變量都處于第二個作用域鏈對象中去了,這也就是為什么要避免使用with的原因。

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

相關文章

  • 通過函數作用域和塊級作用域看javascript的作用域鏈

    通過函數作用域和塊級作用域看javascript的作用域鏈

    這篇文章給大家分享了通過函數作用域和塊級作用域看javascript的作用域鏈的相關知識點內容,有興趣的朋友參考學習下。
    2018-08-08
  • 基于jquery實現的省市區(qū)級聯無ajax

    基于jquery實現的省市區(qū)級聯無ajax

    省市區(qū)級聯的實現方法有很多,在本文為大家介紹下如何使用jquery無ajax來實現,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • javascript數組常用方法匯總

    javascript數組常用方法匯總

    這篇文章主要匯總了javascript中數組常用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • javascript事件的綁定基礎實例講解(34)

    javascript事件的綁定基礎實例講解(34)

    這篇文章主要為大家詳細介紹了javascript事件的綁定基礎實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • JavaScript實現商品放大鏡效果

    JavaScript實現商品放大鏡效果

    這篇文章主要為大家詳細介紹了JavaScript實現商品放大鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • javascript 通過鍵名獲取鍵盤的keyCode方法

    javascript 通過鍵名獲取鍵盤的keyCode方法

    下面小編就為大家分享一篇javascript 通過鍵名獲取鍵盤的keyCode方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • javascript中關于去重操作的使用

    javascript中關于去重操作的使用

    這篇文章主要介紹了javascript中關于去重操作的,在JS中關于數據去重操作的使用是非常常用,也是非常重要的點,一般情況下關于對數組去重點操作是最常用的,下文我們就來介紹js去重相關內容,需要的朋友可以參考下
    2022-04-04
  • 微信小程序實現拍照功能

    微信小程序實現拍照功能

    這篇文章主要為大家詳細介紹了微信小程序實現拍照功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • javascript中的previousSibling和nextSibling的正確用法

    javascript中的previousSibling和nextSibling的正確用法

    這篇文章主要介紹了javascript中的previousSibling和nextSibling的正確用法的相關資料,需要的朋友可以參考下
    2015-09-09
  • 詳解微信小程序 頁面跳轉 傳遞參數

    詳解微信小程序 頁面跳轉 傳遞參數

    這篇文章主要介紹了詳解微信小程序 頁面跳轉 傳遞參數,現在分享給大家,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-12-12

最新評論