JavaScript作用域?qū)W習(xí)筆記

作用域鏈

作用域的原理: ”JavaScript中的函數(shù)運(yùn)行在它們被定義的作用域里,而不是它們被執(zhí)行的作用域里.”
所以函數(shù)的作用域其實(shí)是在它們被定義的那時(shí)就決定降传,和運(yùn)行時(shí)沒啥關(guān)系咧叭∏莩担看下面這個(gè)簡單的例子:

var name = 'world';
function echo() {
     alert(name); //undefined
     var name = 'hello'; 
     alert(name); //hello
     alert(age); //error
}
echo();

這個(gè)例子其實(shí)等于下面這個(gè)缴挖,就是把局部變量定義提升了:

var name = 'world';
function echo() {
     var name;
     alert(name); //undefined
     name = 'hello'; 
     alert(name); //hello
     alert(age); //error
}
echo();

這樣就好理解了务热。

預(yù)編譯

直接看例子吧:

<script>
     alert(typeof eve); //結(jié)果:function
     alert(typeof walle); //結(jié)果:undefined
     function eve() { //函數(shù)定義式
          alert('hello world');
     };
     var walle = function() { //函數(shù)表達(dá)式
     }
     alert(typeof walle); //結(jié)果:function
</script>

在JavaScript里,在調(diào)用函數(shù)執(zhí)行之前, 會首先創(chuàng)建一個(gè)活動對象, 然后搜尋這個(gè)函數(shù)中的局部變量定義(var),和函數(shù)定義(function), 將變量名和函數(shù)名都做為這個(gè)活動對象的同名屬性, 對于局部變量定義,變量的值會在真正執(zhí)行的時(shí)候才計(jì)算, 此時(shí)只是簡單的賦為undefined.

改變(延長)作用域

  1. with語句吓笙,會將指定對象添加到作用域鏈中淑玫,這個(gè)對象將被推入作用域鏈的頭部,這意味著函數(shù)的所有局部變量現(xiàn)在處于第二個(gè)作用域鏈對象中面睛,因此訪問代價(jià)更高了絮蒿。實(shí)際使用時(shí)要避免使用with語句。
  2. try-catch語句的catch塊叁鉴,當(dāng)try代碼塊中發(fā)生錯(cuò)誤時(shí)土涝,執(zhí)行過程會跳轉(zhuǎn)到catch語句,然后把異常對象推入一個(gè)可變對象并置于作用域的頭部幌墓。在catch代碼塊內(nèi)部但壮,函數(shù)的所有局部變量將會被放在第二個(gè)作用域鏈對象中。以下例子可以優(yōu)化代碼性能:
try {
  doSomething();
} catch (ex) {
  handleError(ex); //委托給處理器方法
}

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末常侣,一起剝皮案震驚了整個(gè)濱河市茵肃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袭祟,老刑警劉巖验残,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巾乳,居然都是意外死亡您没,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門胆绊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氨鹏,“玉大人,你說我怎么就攤上這事压状∑偷郑” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵种冬,是天一觀的道長镣丑。 經(jīng)常有香客問我,道長娱两,這世上最難降的妖魔是什么莺匠? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮十兢,結(jié)果婚禮上趣竣,老公的妹妹穿的比我還像新娘摇庙。我一直安慰自己,他們只是感情好遥缕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布卫袒。 她就那樣靜靜地躺著,像睡著了一般单匣。 火紅的嫁衣襯著肌膚如雪夕凝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天封孙,我揣著相機(jī)與錄音迹冤,去河邊找鬼。 笑死虎忌,一個(gè)胖子當(dāng)著我的面吹牛泡徙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膜蠢,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼堪藐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挑围?” 一聲冷哼從身側(cè)響起礁竞,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杉辙,沒想到半個(gè)月后模捂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜘矢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年狂男,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片品腹。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岖食,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舞吭,到底是詐尸還是另有隱情泡垃,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布羡鸥,位于F島的核電站蔑穴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏兄春。R本人自食惡果不足惜澎剥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赶舆。 院中可真熱鬧哑姚,春花似錦、人聲如沸芜茵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽九串。三九已至绞佩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猪钮,已是汗流浹背品山。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烤低,地道東北人肘交。 一個(gè)月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像扑馁,于是被迫代替她去往敵國和親涯呻。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

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