国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺析JavaScript中的變量復(fù)制、參數(shù)傳遞和作用域鏈

2019-11-20 10:48:46
字體:
供稿:網(wǎng)友

今天在看書的過程中,又發(fā)現(xiàn)了自己目前對Javascript存在的一個知識模糊點(diǎn):JS的作用域鏈,所以就通過查資料看書對作用域鏈相關(guān)的內(nèi)容進(jìn)行了學(xué)習(xí)。今天學(xué)習(xí)筆記主要有這樣幾個關(guān)鍵字:變量、參數(shù)傳遞、執(zhí)行環(huán)境、變量對象、作用域鏈。

  1.變量

  變量需要注意的有兩點(diǎn):變量聲明和復(fù)制變量值。

  變量聲明肯定大家都很熟悉,在JS中我們都是通過 var 關(guān)鍵字進(jìn)行變量聲明的。JS中規(guī)定,通過var聲明的變量會被添加到最近的環(huán)境中,如果聲明并且初始化一個變量沒有用到var關(guān)鍵字,這個變量會被添加到全局環(huán)境中。

  關(guān)于復(fù)制變量值,因?yàn)樽兞康念愋筒煌瑥?fù)制的過程也不同。如果變量是一個基本類型的變量的話,復(fù)制變量值時會給新復(fù)制出的變量分配新的空間,兩個變量值互不影響;如果變量是一個引用類型的話,復(fù)制的操作其實(shí)是讓兩個變量指向了同一處內(nèi)存空間,修改其中一個,另一個也會跟著改變。《Javascript 高級程序設(shè)計》中的圖例其實(shí)很形象            

  2.參數(shù)傳遞

  JavaScript中的參數(shù)傳遞全部是按照值傳遞的。基本類型做參數(shù)一般都不會有什么困惑,如果引用類型做了參數(shù),類似下面這個例子:

function setName(obj){obj.name = "tom";}var person = new Object();setName(person);alert(person.name);//顯示tom 

  這個例子中我們在setName中修改了變量的內(nèi)容,在函數(shù)外也生效了。剛開始我也以為程序執(zhí)行應(yīng)該會彈出 undefined 或者報錯,但是卻彈出了在函數(shù)的作用域中修改的值。分析了一下參數(shù)傳遞的整個過程,這個疑惑就解決了。在參數(shù)傳遞的過程中,有很重要的一步:變量值復(fù)制。我們在調(diào)用函數(shù)時其實(shí)進(jìn)行了 obj=person 這樣一步操作,所以根據(jù)上面提到的引用類型變量值復(fù)制的特點(diǎn),當(dāng)我們修改obj時,同時也就修改了person的值。所以JS參數(shù)傳遞的方式是值傳遞,并且只能是值傳遞。

  3.執(zhí)行環(huán)境、變量對象、作用域鏈

  我對執(zhí)行環(huán)境、執(zhí)行環(huán)境的理解有點(diǎn)類似與類和對象:

  執(zhí)行環(huán)境中定義了變量、函數(shù)和函數(shù)可以訪問到的其他數(shù)據(jù),而當(dāng)這個執(zhí)行環(huán)境被激活時,就會根據(jù)這個執(zhí)行環(huán)境創(chuàng)建出一個變量對象提供給解析器使用。執(zhí)行環(huán)境就好比是類,變量對象就對應(yīng)是對象。

  當(dāng)一個執(zhí)行環(huán)境激活時,它就會被推入一個棧的棧頂中執(zhí)行,當(dāng)它執(zhí)行完畢,會將它移出棧,執(zhí)行在它之前進(jìn)入棧的環(huán)境,以此類推。

  而作用域鏈相當(dāng)于一個存放變量對象的棧,越早被激活的執(zhí)行環(huán)境創(chuàng)建出的變量對象越在下面,當(dāng)前激活的執(zhí)行環(huán)境的變量對象位于棧頂。如果當(dāng)前執(zhí)行環(huán)境執(zhí)行完畢,那么就需要將棧頂?shù)淖兞繉ο螅▽?yīng)執(zhí)行環(huán)境)從棧頂移出。

  而執(zhí)行環(huán)境在執(zhí)行時,解析器需要訪問變量等數(shù)據(jù)都是從作用域頂端開始查找,也就是從當(dāng)前執(zhí)行環(huán)境對應(yīng)的變量對象開始查找,如果查找不到,則往下進(jìn)入外層執(zhí)行環(huán)境對應(yīng)的變量對象中查找,一直持續(xù)到找到需要的對象或找到全局環(huán)境的變量對象為止。所以這種查找方式也就說明了太多定義在全局環(huán)境中的變量比較影響程序的性能。

  今天學(xué)習(xí)的東西主要是概念性質(zhì)的,而且比較抽象。但是這部分對于后面所有的知識都是基礎(chǔ),像是之后的閉包啊,繼承啊,原型啊都要對這部分內(nèi)容有很好的理解才能學(xué)的更明白透徹,所以這部分內(nèi)容應(yīng)該反復(fù)學(xué)習(xí),要相信溫故而知新,古人誠不欺我也(。・∀・)ノ゙

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 益阳市| 昌都县| 定襄县| 武川县| 防城港市| 合作市| 读书| 象山县| 华亭县| 图们市| 荣昌县| 乌恰县| 尉犁县| 冕宁县| 临高县| 阳山县| 衡南县| 金山区| 历史| 汝南县| 呼伦贝尔市| 辽宁省| 疏勒县| 昆山市| 靖边县| 安徽省| 稻城县| 邵东县| 西林县| 新源县| 西乌珠穆沁旗| 云安县| 通许县| 信阳市| 黄骅市| 和田县| 平邑县| 丰顺县| 汪清县| 荣成市| 新干县|