最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

with語句的作用是暫時(shí)改變作用域鏈、減少的重復(fù)輸入。

其語法結(jié)構(gòu)為:

with(object){ 
//statements 
} 

舉一個(gè)實(shí)際例子吧:

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

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

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

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

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

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

所以在以后的高效代碼開發(fā)中我們應(yīng)該盡可能的避免使用with語句。

經(jīng)過測(cè)試:

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中,函數(shù)也是對(duì)象,實(shí)際上,javascript中的一切都是對(duì)象。函數(shù)內(nèi)部有一個(gè)只給javascript引擎訪問的內(nèi)部屬性是[[scope]],該屬性包含了函數(shù)創(chuàng)建時(shí)的作用域中對(duì)象的集合,這個(gè)集合就叫做作用域鏈。

比如下面代碼:

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

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

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

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

with

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

以上所述是小編給大家介紹的JavaScript中with語句的理解,希望對(duì)大家有所幫助,如果大家想了解更多資訊敬請(qǐng)關(guān)注腳本之家網(wǎng)站!

相關(guān)文章

  • 前端監(jiān)控頁面異常的常用方法

    前端監(jiān)控頁面異常的常用方法

    前端開發(fā)常見問題之一: 資源異常、js異常,頁面出了問題常見的想法是:如何看到錯(cuò)誤信息,資源腳本是否正常,像js、css、圖片這些資源文件經(jīng)常受網(wǎng)絡(luò)等原因,導(dǎo)致資源加載異常,這些會(huì)直接影響我們的頁面,本文給大家介紹前端監(jiān)控頁面異常的常用方法,需要的朋友可以參考下
    2025-04-04
  • js事件(Event)知識(shí)整理

    js事件(Event)知識(shí)整理

    事件(Event)知識(shí)整理,本文由網(wǎng)上資料整理而來,需要的朋友可以參考下
    2012-10-10
  • javascript 類型判斷代碼分析

    javascript 類型判斷代碼分析

    今天看到 司徒一篇blog, javascript深拷貝,其中涉及到一種判斷類型的方法,特分析如下
    2010-03-03
  • Javascript拖拽&拖放系列文章3之細(xì)說事件對(duì)象

    Javascript拖拽&拖放系列文章3之細(xì)說事件對(duì)象

    Javascript中的事件對(duì)象其實(shí)和.NET中繼承自EventArgs類的派生類類似,用來給事件處理程序傳遞狀態(tài)信息,從而進(jìn)行相應(yīng)的操作。這一篇文章將講述Javascript事件對(duì)象中和實(shí)現(xiàn)拖拽功能相關(guān)的幾個(gè)屬性,并在最后將IE事件模型和標(biāo)準(zhǔn)DOM事件模型的差異封裝到一個(gè)類中,從而適應(yīng)所有的瀏覽器。
    2008-09-09
  • js動(dòng)態(tài)添加帶圓圈序號(hào)列表的實(shí)例代碼

    js動(dòng)態(tài)添加帶圓圈序號(hào)列表的實(shí)例代碼

    這篇文章主要介紹了js動(dòng)態(tài)添加帶圓圈序號(hào)列表的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • JavaScript中SetInterval與setTimeout的用法詳解

    JavaScript中SetInterval與setTimeout的用法詳解

    在寫H5游戲時(shí)經(jīng)常需要使用定時(shí)刷新頁面實(shí)現(xiàn)動(dòng)畫效果,比較常用即setTimeout()以及setInterval(),但是大家對(duì)SetInterval與setTimeout的用法了解嗎,下面通過本文給大家詳解js中SetInterval與setTimeout的用法,需要的朋友參考下
    2015-11-11
  • 詳解JavaScript UTC時(shí)間轉(zhuǎn)換方法

    詳解JavaScript UTC時(shí)間轉(zhuǎn)換方法

    這篇文章主要介紹了JavaScript UTC時(shí)間轉(zhuǎn)換方法,介紹了本地時(shí)間到UTC時(shí)間的轉(zhuǎn)換、UTC日期到本地日期的轉(zhuǎn)換,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 學(xué)習(xí)JavaScript設(shè)計(jì)模式之單例模式

    學(xué)習(xí)JavaScript設(shè)計(jì)模式之單例模式

    這篇文章主要為大家介紹了JavaScript設(shè)計(jì)模式中的單例模式,對(duì)JavaScript設(shè)計(jì)模式感興趣的小伙伴們可以參考一下
    2016-01-01
  • 純JavaScript實(shí)現(xiàn)實(shí)時(shí)反饋系統(tǒng)時(shí)間

    純JavaScript實(shí)現(xiàn)實(shí)時(shí)反饋系統(tǒng)時(shí)間

    這篇文章主要介紹了純JavaScript實(shí)現(xiàn)實(shí)時(shí)反饋系統(tǒng)時(shí)間的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • 淺談JavaScript中promise的使用

    淺談JavaScript中promise的使用

    本文主要對(duì)JavaScript中promise的使用進(jìn)行詳細(xì)介紹。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01

最新評(píng)論

府谷县| 南阳市| 股票| 探索| 凭祥市| 绥中县| 永平县| 微山县| 镇巴县| 松溪县| 游戏| 东平县| 彝良县| 昌江| 尚志市| 犍为县| 普陀区| 永嘉县| 登封市| 普格县| 宜兰市| 葫芦岛市| 长乐市| 清原| 洞头县| 梅河口市| 嵊州市| 北安市| 南昌市| 调兵山市| 兴隆县| 彝良县| 烟台市| 屯门区| 古丈县| 武义县| 从江县| 六安市| 托里县| 丽江市| 呼伦贝尔市|