javascript基礎(chǔ)之(令人捉摸不透的)作用域

相信學(xué)過javascript的童鞋們都知道作用域在在其中的重要性了垮耳,然而很多人在剛接觸過作用域后敌卓,對(duì)于作用域的理解,可能都會(huì)有點(diǎn)似懂非懂抹缕,今天樓主就對(duì)
作用域進(jìn)行詳細(xì)講解澈蟆,并附有各種面試考題例子,希望對(duì)于看過這篇文章的童鞋能有所幫助卓研。

首先:我們?cè)谧置嫔侠斫庀伦饔糜颉?/h3>

作用:指“讀 寫”趴俘。
域:指“空間、范圍奏赘、區(qū)域......”寥闪。
所以作用域可以理解為:在一個(gè)范圍區(qū)域內(nèi)進(jìn)行讀寫操作。

接下來(lái):我們來(lái)模擬一下瀏覽器對(duì)于javascript的解析過程磨淌。

首先我們要了解瀏覽器對(duì)javascript的解析是從上往下開始逐行解析的疲憋。
對(duì)于瀏覽器:
可將瀏覽器內(nèi)部模擬出一個(gè)“JS解析器”
(1):首先進(jìn)行JS的預(yù)解析

解析器會(huì)“找一些東西”:var(變量) function(函數(shù)) 參數(shù)

比如找到一個(gè)變量a-> a=...(undefined)

所有的變量,在正式運(yùn)行代碼之前梁只,都會(huì)提前賦一個(gè)值:undefined缚柳。

或者比如找到一個(gè)函數(shù)fn1-> fn1=function fn1(){alert(1);}
所有的函數(shù)埃脏,在正式運(yùn)行代碼之前,都是整個(gè)函數(shù)塊喂击。

遇到重名只留下一個(gè)剂癌,變量和函數(shù)名重名了,就只留下函數(shù)

(2):解析器再逐行解讀代碼:

碰到表達(dá)式可以修改預(yù)解析里的值翰绊。

例:表達(dá)式:= - * / % ++ -- 佩谷! 參數(shù)......

一個(gè)變量如果作用于整個(gè)作用域,則稱這個(gè)變量為全局變量监嗜,作用域?yàn)槿趾瘮?shù)
一個(gè)變量如果只作用于一個(gè)函數(shù)內(nèi)部谐檀,則稱這個(gè)變量為局部變量,作用域?yàn)榫植亢瘮?shù)

接下來(lái)通過各個(gè)例子裁奇,來(lái)對(duì)作用域進(jìn)行更深刻的理解桐猬。

         //樓主就對(duì)第一個(gè)例子進(jìn)行詳細(xì)說明,接下來(lái)的例子希望童鞋們通過自己的理解來(lái)進(jìn)行解答

          alert(a);       //        function a(){alert(2)}          
          var a=1;                                              //根據(jù)上面的解析過程 首先找到變量和函數(shù),并給
          alert(a);        //      1                              變量賦上未定義刽肠,函數(shù)附上整個(gè)函數(shù)塊溃肪。  
          function a(){alert(2);}                                   a=...  a=function a(){alert(2)}
          alert(a);       //     1                                因?yàn)樽兞棵秃瘮?shù)名重名了,所以只留下函數(shù)音五。         
          var a=3;                                                  a=function a(){alert(2)}
          alert(a);       //     3                                再進(jìn)行逐行解讀代碼
          function a(){alert(4);}                                      碰到表達(dá)式惫撰,可以修改預(yù)解析里的值
          alert(a);        //    3

接下來(lái)樓主寫下例子和答案,童鞋們可以根據(jù)以上步驟自己進(jìn)行分析躺涝。

           var a=1;
           function fn1(){
                alert(a);          //undefined
                var a=2;
             }
           fn1();
           alert(a);        //  1
 

          /*-----------------------------------*/


           var a=1;
           function fn1(){                  
                alert(a);           //  1
                a=2;                 ?               函數(shù):
             }                                            由里往外找變量
           fn1();
           alert(a);          //   2
     
           /*-----------------------------------*/

           var a=1;
           function fn1(a){         
                alert(a);           // undefined
                a=2;                 ?              
             }                                           
           fn1();
           alert(a);          //  1
       
          /*-----------------------------------*/

           var a=1;
           function fn1(a){              
                alert(a);           //  1
                a=2;                 ?              
             }                                           
           fn1(a);
           alert(a);         //  1

通過以上例子厨钻,相信大家對(duì)于作用域一定有了更加深刻的理解,那么樓主就出一道小題坚嗜,答案大家可以寫在評(píng)論里夯膀,或者簡(jiǎn)信給我。

             <script>
                 window.onload=function(){
                   var oBtn=document.getElementsByTagName('input');
                   for(var i=0;i<3;i++){
                       oBtn[i].onclick=function(){
                       alert(i);
                     }
                                }
       }
            </script>

請(qǐng)大家告知alert(i)中i的值2允摺S战ā!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碟绑,一起剝皮案震驚了整個(gè)濱河市涂佃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜈敢,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汽抚,死亡現(xiàn)場(chǎng)離奇詭異抓狭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)造烁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門否过,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)午笛,“玉大人,你說我怎么就攤上這事苗桂∫┗牵” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵煤伟,是天一觀的道長(zhǎng)癌佩。 經(jīng)常有香客問我,道長(zhǎng)便锨,這世上最難降的妖魔是什么围辙? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮放案,結(jié)果婚禮上姚建,老公的妹妹穿的比我還像新娘。我一直安慰自己吱殉,他們只是感情好掸冤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著友雳,像睡著了一般稿湿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沥阱,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天缎罢,我揣著相機(jī)與錄音,去河邊找鬼考杉。 笑死策精,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崇棠。 我是一名探鬼主播咽袜,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼枕稀!你這毒婦竟也來(lái)了询刹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萎坷,失蹤者是張志新(化名)和其女友劉穎凹联,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哆档,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔽挠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓜浸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澳淑。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡比原,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杠巡,到底是詐尸還是另有隱情量窘,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布氢拥,位于F島的核電站蚌铜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏兄一。R本人自食惡果不足惜厘线,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望出革。 院中可真熱鬧造壮,春花似錦、人聲如沸骂束。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)展箱。三九已至旨枯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間混驰,已是汗流浹背攀隔。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栖榨,地道東北人昆汹。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像婴栽,于是被迫代替她去往敵國(guó)和親满粗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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