亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【轉(zhuǎn)】javascript:with的用法以及延長(zhǎng)作用域鏈

weapon / 1748人閱讀

摘要:來(lái)看一下語(yǔ)句的作用通俗的說(shuō),就是引用對(duì)象,并對(duì)該對(duì)象上的屬性進(jìn)行操作,其作用是可以省略重復(fù)書(shū)寫(xiě)該對(duì)象名稱,起到簡(jiǎn)化書(shū)寫(xiě)的作用。

原文鏈接:https://www.cnblogs.com/zz334...

《Javascript高級(jí)程序設(shè)計(jì)(第二版)》第66頁(yè)中提到:“由于with語(yǔ)句的變量對(duì)象是只讀的,結(jié)果url就成了函數(shù)執(zhí)行環(huán)境的一部分,因而可以作為函數(shù)的值被返回。”,不知道誰(shuí)看完覺(jué)得一頭霧水?

第三版中75頁(yè)則更是難懂:“至于with語(yǔ)句內(nèi)部,則定義了一個(gè)url的變量,因此url就成了函數(shù)執(zhí)行環(huán)境的一部分,所以可以作為函數(shù)的值被返回”

首先來(lái)看看他舉的例子:

function buildUrl(){  
     var qs="?debug=true";  
     with(location){  
          var url=href+qs;  
     }  
     return url;  
}  
var result=buildUrl();  
  
alert(result);  

如果你沒(méi)讀過(guò)著本書(shū),并且需要學(xué)習(xí)javascript,請(qǐng)思考并嘗試運(yùn)行該例子。
最后彈出的不是undefined,而是你的靜態(tài)頁(yè)地址+qs的值。

來(lái)看一下with語(yǔ)句的作用:

通俗的說(shuō),就是引用對(duì)象,并對(duì)該對(duì)象上的屬性進(jìn)行操作,其作用是可以省略重復(fù)書(shū)寫(xiě)該對(duì)象名稱,起到簡(jiǎn)化書(shū)寫(xiě)的作用。

但是有幾個(gè)問(wèn)題需要注意:

1、with代碼塊中,javascript引擎對(duì)變量的處理方式是:先查找是不是該對(duì)象的屬性,如果是,則停止。如果不是繼續(xù)查找是不是局部變量。(在《Javascript高級(jí)程序設(shè)計(jì)(第二版)》中提到的觀點(diǎn),跟這一點(diǎn)恰好相反,但是實(shí)例可證明其是錯(cuò)誤的,會(huì)在接下來(lái)介紹)

2、就算在with語(yǔ)句中使用 var 運(yùn)算符重新定義變量(該變量是with引用對(duì)象的屬性),如果該屬性是可寫(xiě)屬性,那么也會(huì)給對(duì)象的屬性賦值。

3、如果你想通過(guò)with語(yǔ)句,對(duì)引用對(duì)象添加多個(gè)屬性,并為每個(gè)屬性賦值,這是不可能的!也就是說(shuō),要賦值的只能是對(duì)象已經(jīng)存在并且可以寫(xiě)入的屬性(不能是只讀屬性)。

再來(lái)看看開(kāi)頭提到的那句話

“由于with語(yǔ)句的變量對(duì)象是只讀的,結(jié)果url就成了函數(shù)執(zhí)行環(huán)境的一部分,因而可以作為函數(shù)的值被返回?!?/p>

反過(guò)來(lái):如果with語(yǔ)句的變量對(duì)象是可寫(xiě)入的…… 剛才第3點(diǎn)提過(guò),不能給對(duì)象寫(xiě)入原來(lái)不存在的屬性,先這樣理解,下面還有另外的含義。

那延長(zhǎng)作用域鏈又是怎么回事?

一般的,“由于with語(yǔ)句塊中作用域的‘變量對(duì)象’是只讀的,所以在他本層定義的標(biāo)識(shí)符,不能存儲(chǔ)到本層,而是存儲(chǔ)到它的上一層作用域”。這里又要理解有一層“只讀”的含義。

在Javascript的作用域中(作用域,想想就是函數(shù)塊,每個(gè)函數(shù)都會(huì)有個(gè)函數(shù)名,就算是匿名函數(shù)也有個(gè)空函數(shù)名),那么創(chuàng)建作用域的時(shí)候,本層的標(biāo)識(shí)符就可以寄托在這個(gè)作用域下,而with語(yǔ)句塊中作用域的‘變量對(duì)象’是只讀的,不能存儲(chǔ)標(biāo)識(shí)符,只能存儲(chǔ)在其上一層,這就是延長(zhǎng)作用域鏈。其實(shí),這和上面說(shuō)的不能給對(duì)象添加屬性有同工之處。

其實(shí),完全可以這樣理解,在Javascript中,沒(méi)有塊級(jí)作用域,就是說(shuō)除了函數(shù),其他的塊級(jí)代碼都沒(méi)有自己的作用域。

現(xiàn)在說(shuō)一下之前提到的with代碼塊中變量處理方式的問(wèn)題

用事實(shí)說(shuō)話:

var o={href:"sssss"};  
var href="1111";  
function buildUrl(){  
     var qs="?debug=true";       
     with(o){  
          href="2222";  
          var url=href+qs;  
     }      
     return url;  
}  
var result=buildUrl();  
alert(result);  //2222?debug=true
alert(href);  //1111

很明顯,with語(yǔ)句中并沒(méi)有更改變量href的值,而是更改了 o 對(duì)象的 href 屬性。

就是說(shuō),with中首先查找的是相關(guān)對(duì)象的屬性,如果沒(méi)有,才改變變量的值。

將以上例子o對(duì)象的href屬性去掉

var o={};  
var href="1111";  
function buildUrl(){  
     var qs="?debug=true";       
     with(o){  
          href="2222";  
          var url=href+qs;  
     }      
     return url;  
}  
var result=buildUrl();  
alert(result);  //2222?debug=true
alert(href); //2222

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/103727.html

相關(guān)文章

  • JavaScript作用域鏈

    摘要:而作用域鏈則控制著變量與函數(shù)的可見(jiàn)性和生命周期。三延長(zhǎng)作用域鏈在中,和關(guān)鍵字能延長(zhǎng)作用域鏈,對(duì)來(lái)說(shuō),將會(huì)指定一個(gè)只讀對(duì)象添加到作用域鏈中。 本文共 1200 字,讀完只需 4 分鐘 概述 JavaScript 中的可執(zhí)行代碼有其執(zhí)行上下文,在執(zhí)行上下文中,有三個(gè)重要的元素: 變量對(duì)象(variable object) 作用域鏈(scope chain) this 其中,變量對(duì)象是上...

    Karrdy 評(píng)論0 收藏0
  • Javascript執(zhí)行環(huán)境和作用注意要點(diǎn)

    摘要:所以,全局執(zhí)行環(huán)境的變量對(duì)象始終都是作用域鏈中的最后一個(gè)對(duì)象。搜索過(guò)程從作用域鏈的最前端開(kāi)始,逐級(jí)向后回溯,直到找到標(biāo)識(shí)符為止。查詢標(biāo)識(shí)符搜索過(guò)程就是沿作用域鏈向上查詢的過(guò)程。 執(zhí)行環(huán)境 執(zhí)行環(huán)境就是環(huán)境,是js中最重要的概念。執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問(wèn)的其他數(shù)據(jù)。每個(gè)執(zhí)行環(huán)境都有一個(gè)與之相關(guān)的變量對(duì)象(我們編寫(xiě)的代碼無(wú)法訪問(wèn)這個(gè)對(duì)象)。 全局執(zhí)行環(huán)境(是最外圍的執(zhí)行環(huán)境。在W...

    CKJOKER 評(píng)論0 收藏0
  • 【JS. ES5重點(diǎn)筆記】執(zhí)行環(huán)境和作用

    摘要:作用域鏈的用途,是保證對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)的所有變量和函數(shù)的有序訪問(wèn)。這樣,一直延續(xù)到全局執(zhí)行環(huán)境全局執(zhí)行環(huán)境的變量對(duì)象始終都是作用域鏈中的最后一個(gè)對(duì)象。如果在局部環(huán)境中沒(méi)有找到該變量名,則繼續(xù)沿作用域鏈向上搜索。 【JavaScript.ES5】執(zhí)行環(huán)境和作用域 參考文獻(xiàn): Nicholas C.Zakas 《JavaScript》高級(jí)程序設(shè)計(jì) 僅為個(gè)人學(xué)習(xí)參考文獻(xiàn)的內(nèi)容記錄的筆記。存...

    Jeffrrey 評(píng)論0 收藏0
  • JavaScript基礎(chǔ)系列---執(zhí)行環(huán)境與作用域鏈

    摘要:延長(zhǎng)作用域鏈下面兩種語(yǔ)句可以在作用域鏈的前端臨時(shí)增加一個(gè)變量對(duì)象以延長(zhǎng)作用域鏈, 問(wèn)題 今天看筆記發(fā)現(xiàn)自己之前記了一個(gè)關(guān)于同名標(biāo)識(shí)符優(yōu)先級(jí)的內(nèi)容,具體是下面這樣的: 形參優(yōu)先級(jí)高于當(dāng)前函數(shù)名,低于內(nèi)部函數(shù)名 形參優(yōu)先級(jí)高于arguments 形參優(yōu)先級(jí)高于只聲明卻未賦值的局部變量,但是低于聲明且賦值的局部變量 函數(shù)和變量都會(huì)聲明提升,函數(shù)名和變量名同名時(shí),函數(shù)名的優(yōu)先級(jí)要高。執(zhí)行代...

    J4ck_Chan 評(píng)論0 收藏0
  • JavaScript高級(jí)程序設(shè)計(jì)(第3版)》——變量、作用域和內(nèi)存問(wèn)題(四)

    摘要:執(zhí)行環(huán)境的類(lèi)型有兩種全局全局執(zhí)行環(huán)境局部函數(shù)執(zhí)行環(huán)境每個(gè)環(huán)境都可以向上搜索作用域鏈,以查詢變量和函數(shù)名但任何環(huán)境都不能通過(guò)向下搜索作用域鏈而進(jìn)入另一個(gè)執(zhí)行環(huán)境。內(nèi)部可通過(guò)作用域鏈訪問(wèn)外部,外部不能訪問(wèn)內(nèi)部。 變量、作用域和內(nèi)存問(wèn)題 ECMAScript 數(shù)據(jù)類(lèi)型 基本類(lèi)型(5種): Undefined,Null,Boolean,Number,String typeof() 檢測(cè)...

    YacaToy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<