js作用域和作用域鏈

一、作用域

作用域就是變量和函數(shù)的可訪問(wèn)范圍隘梨,控制著變量和函數(shù)的可見(jiàn)性與生命周期程癌,在JavaScript中變量的作用域有全局作用域和局部作用域。

變量沒(méi)有在函數(shù)內(nèi)聲明或者聲明的時(shí)候沒(méi)有帶var就是全局變量轴猎,擁有全局作用域嵌莉,window對(duì)象的所有屬性擁有全局作用域;在代碼任何地方都可以訪問(wèn)捻脖,函數(shù)內(nèi)部聲明并且以var修飾的變量就是局部變量锐峭,只能在函數(shù)體內(nèi)使用,函數(shù)的參數(shù)雖然沒(méi)有使用var但仍然是局部變量可婶。

      var a=3; //全局變量
        function fn(b){ //局部變量
            c=2; //全局變量
            var d=5; //局部變量
            function subFn(){
                var e=d; //父函數(shù)的局部變量對(duì)子函數(shù)可見(jiàn)
                for(var i=0;i<3;i++){
                    console.write(i);
                }
                alert(i);//3, 在for循環(huán)內(nèi)聲明沿癞,循環(huán)外function內(nèi)仍然可見(jiàn),沒(méi)有塊作用域
            }
        }
        alert(c); //在function內(nèi)聲明但不帶var修飾矛渴,仍然是全局變量

然而執(zhí)行環(huán)境(execution context)定義了變量或函數(shù)有權(quán)訪問(wèn)的其它數(shù)據(jù)椎扬,決定了它們的各自行為。每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對(duì)象(variable object, VO)具温,執(zhí)行環(huán)境中定義的所有變量和函數(shù)都會(huì)保存在這個(gè)對(duì)象中蚕涤,解析器在處理數(shù)據(jù)的時(shí)候就會(huì)訪問(wèn)這個(gè)內(nèi)部對(duì)象。
全局執(zhí)行環(huán)境是最外層的一個(gè)執(zhí)行環(huán)境铣猩,在web瀏覽器中全局執(zhí)行環(huán)境是window對(duì)象揖铜,因此所有全局變量和函數(shù)都是作為window對(duì)象的屬性和放大創(chuàng)建的。

二达皿、作用域鏈

當(dāng)代碼在一個(gè)環(huán)境中執(zhí)行時(shí)天吓,會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈(scope chain,不簡(jiǎn)稱sc)來(lái)保證對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)的變量和函數(shù)的有序訪問(wèn)。作用域第一個(gè)對(duì)象始終是當(dāng)前執(zhí)行代碼所在環(huán)境的變量對(duì)象(VO)

  function a(x,y){
        var b=x+y;
        return b;
    }

在函數(shù)a創(chuàng)建的時(shí)候它的作用域鏈填入全局對(duì)象,全局對(duì)象中有所有全局變量


如果執(zhí)行環(huán)境是函數(shù)峦椰,那么將其活動(dòng)對(duì)象(activation object, AO)作為作用域鏈第一個(gè)對(duì)象龄寞,第二個(gè)對(duì)象是包含環(huán)境,下一個(gè)是包含環(huán)境的包含環(huán)境汤功。萄焦。。冤竹。。

  function a(x,y){
        var b=x+y;
        return b;
    }
    var tatal=a(5,10);

這時(shí)候 var total=a(5,10);語(yǔ)句的作用域鏈如下

在函數(shù)運(yùn)行過(guò)程中標(biāo)識(shí)符的解析是沿著作用域鏈一級(jí)一級(jí)搜索的過(guò)程茬射,從第一個(gè)對(duì)象開(kāi)始鹦蠕,逐級(jí)向后回溯,直到找到同名標(biāo)識(shí)符為止在抛,找到后不再繼續(xù)遍歷钟病,找不到就報(bào)錯(cuò)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肠阱,隨后出現(xiàn)的幾起案子票唆,更是在濱河造成了極大的恐慌,老刑警劉巖屹徘,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件走趋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡噪伊,警方通過(guò)查閱死者的電腦和手機(jī)簿煌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鉴吹,“玉大人姨伟,你說(shuō)我怎么就攤上這事《估” “怎么了夺荒?”我有些...
    開(kāi)封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)良蒸。 經(jīng)常有香客問(wèn)我技扼,道長(zhǎng),這世上最難降的妖魔是什么诚啃? 我笑而不...
    開(kāi)封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任淮摔,我火速辦了婚禮,結(jié)果婚禮上始赎,老公的妹妹穿的比我還像新娘和橙。我一直安慰自己,他們只是感情好造垛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布魔招。 她就那樣靜靜地躺著,像睡著了一般五辽。 火紅的嫁衣襯著肌膚如雪办斑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天杆逗,我揣著相機(jī)與錄音乡翅,去河邊找鬼。 笑死罪郊,一個(gè)胖子當(dāng)著我的面吹牛蠕蚜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悔橄,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼靶累,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼腺毫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起挣柬,我...
    開(kāi)封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潮酒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后邪蛔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體急黎,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年店溢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叁熔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡床牧,死狀恐怖荣回,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戈咳,我是刑警寧澤心软,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站著蛙,受9級(jí)特大地震影響删铃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踏堡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一猎唁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顷蟆,春花似錦诫隅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至削樊,卻和暖如春豁生,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漫贞。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工甸箱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迅脐。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓芍殖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親仪际。 傳聞我的和親對(duì)象是個(gè)殘疾皇子围小,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前天被問(wèn)到作用域鏈的知識(shí),感覺(jué)有個(gè)大概的認(rèn)識(shí)树碱,但是轉(zhuǎn)化為語(yǔ)言就無(wú)法調(diào)理清楚地講述出來(lái)肯适,回來(lái)后決定惡補(bǔ)功課,在此做個(gè)...
    栗子酥小小閱讀 334評(píng)論 0 0
  • 前言 對(duì)于js中的閉包,無(wú)論是老司機(jī)還是小白,我想,見(jiàn)得不能再多了,然而有時(shí)三言兩語(yǔ)卻很難說(shuō)得明白,反正在我初學(xué)時(shí)...
    itclanCoder閱讀 4,189評(píng)論 1 11
  • 一成榜、作用域 一個(gè)變量的作用域(scope)是程序源代碼中定義的這個(gè)變量的區(qū)域框舔。 1. 在JS中使用的是詞法作用域(...
    掙脫吧小白閱讀 437評(píng)論 0 0
  • 周末看了一本關(guān)于健身方面的書,《硬派健身·減肥篇》赎婚,這是一本實(shí)用性質(zhì)的書刘绣,因此,我在這篇文字中挣输,把書內(nèi)的一些內(nèi)容概...
    老撒閱讀 3,173評(píng)論 1 9
  • 玲子說(shuō)李Sir肯定喜歡我纬凤,不然為何老跟著我?為何老往一個(gè)女同事住的地方跑撩嚼?他沒(méi)車停士、沒(méi)房、沒(méi)有穩(wěn)定工作完丽,和我擇偶標(biāo)準(zhǔn)...
    楚墨瞳閱讀 278評(píng)論 0 0