毫無節(jié)操地理解js的作用域、閉包

今天在水群時(shí)發(fā)現(xiàn)有小伙伴又拿出了這樣的代碼:

  function a(){
   function b(){   
       c = 1; 
   }
  }

然后問c是誰的囱嫩。恃疯。。
我一看墨闲,誒呀我擦今妄,這又不是作用域的問題嗎?剛想說c是b的變量鸳碧,但是定睛一看盾鳞,不對(duì),媽的有陷阱瞻离,c前沒加var腾仅,又不是嚴(yán)格模式,然后我就跟他說:
"c是全局變量套利。"
然后他就咚咚咚地用nodejs敲了一下然后:

nodejs.png

噗推励,not defined。額肉迫,這個(gè)嘛吹艇,你a和b都沒有被執(zhí)行。昂拂。。何來的c抛猖。格侯。。

不過财著,既然又遇到這種問題联四,那么就必須好好解答了。

第一個(gè)問題:什么是作用域撑教?

作用域朝墩,就是函數(shù)的老婆。
好吧我正經(jīng)一點(diǎn)伟姐,作用域就是函數(shù)執(zhí)行的地方收苏。
當(dāng)你看見一個(gè)函數(shù),不管它長(zhǎng)什么樣子愤兵,有一點(diǎn)肯定一樣的鹿霸,那就是function *(){},“*”號(hào)代表任意合法聲明函數(shù)的字符包括空字符秆乳。那么懦鼠,作用域就存在于兩個(gè)大括號(hào)之間钻哩。
例如:

function a(){
    /*a的作用域*/
    var _a;
    function b(){
         /*b的作用域*/
         var _b;
         function c(){
               /*c的作用域*/
               var _c;
         }
    }
}

當(dāng)然,我說作用域是函數(shù)的老婆是有道理的肛冶,你看上面街氢,a與a的作用域下不是生出了個(gè)b么?b與b的作用域下不是生出了個(gè)c么睦袖?完全可以這樣理解嘛珊肃。
那么,既然作用域是函數(shù)的老婆扣泊,那么訪問變量算什么近范?

訪問變量算“親吻”

想想看,作用域最大的特點(diǎn)是什么延蟹?
我們經(jīng)常聽到一句話评矩,

函數(shù)內(nèi)部可以訪問外部變量,函數(shù)外部不能訪問函數(shù)內(nèi)部變量阱飘。

沒錯(cuò)斥杜,作用域就是用來區(qū)分函數(shù)內(nèi)部和外部的。其次沥匈,因?yàn)楹瘮?shù)外部作用域不能訪問函數(shù)內(nèi)部作用域蔗喂,所以定義在函數(shù)作用域的變量可以看成函數(shù)的私有變量,就是別人無法訪問的變量高帖。
額缰儿,看起來還是有點(diǎn)復(fù)雜?
那么可以這樣理解:

  • 作用域是函數(shù)的老婆
  • 訪問變量是親吻作用域(因?yàn)樽兞渴嵌x在作用域里的)

然后還是剛才的代碼:

function a(){
    /*a的作用域*/
    var _a;
    function b(){
         /*b的作用域*/
         var _b;
         function c(){
               /*c的作用域*/
               var _c;
         }

         function d(){
              /*d的作用域*/
              var _d;
         }
    }
}

很明顯散址,b可以訪問到_a乖阵,為什么?孩子親媽媽不是很正常嗎预麸?
然后瞪浸,c可以訪問到_a/_b,為什么吏祸?孫子親媽媽奶奶不是很正常嗎对蒲?
然后,a無法訪問到_b/_c贡翘,為什么蹈矮?你家爸爸可以親兒媳婦?你家爺爺可以親孫媳婦床估?這不好吧含滴。。丐巫。
然后我新增加了一個(gè)d函數(shù)谈况,為了說明一個(gè)問題:弟弟不能親嫂子勺美。函數(shù)d無法訪問到_c。同樣碑韵,哥哥不能親弟妹赡茸,函數(shù)c無法訪問到_d。

這樣是不是一下子就理解了祝闻?

函數(shù)都有老婆了占卧,~~我還是單身狗 ~~,那閉包算什么

咳咳联喘,閉包就是函數(shù)允許別人“親吻”他老婆的某些地方华蜒。
當(dāng)然不是直接“親吻”,是通過一些間接的方式讓別人“親”到他老婆豁遭。

function a(){
    /*a的作用域*/
    function b(){
        /*b的作用域*/
        var _b="我是_b";
        return function c(){
             console.log(_b);
        }
    }

    var _a=b();
    _a();//打印"我是_b"
}

天啊擼叭喜,a居然能訪問"我是_b"這個(gè)字符串,要知道這個(gè)字符串可是屬于b的作用域蓖谢。捂蕴。。b的老婆的一部分啊闪幽。
恩啥辨,所以嘛。盯腌。溉知。可以理解閉包的作用了吧腕够。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末着倾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子燕少,更是在濱河造成了極大的恐慌,老刑警劉巖蒿囤,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件客们,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡材诽,警方通過查閱死者的電腦和手機(jī)底挫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脸侥,“玉大人建邓,你說我怎么就攤上這事≌稣恚” “怎么了官边?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵沸手,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我注簿,道長(zhǎng)契吉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任诡渴,我火速辦了婚禮捐晶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妄辩。我一直安慰自己惑灵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布眼耀。 她就那樣靜靜地躺著英支,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畔塔。 梳的紋絲不亂的頭發(fā)上潭辈,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音澈吨,去河邊找鬼把敢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谅辣,可吹牛的內(nèi)容都是我干的修赞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桑阶,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柏副!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚣录,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤割择,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后萎河,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荔泳,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年虐杯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玛歌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡擎椰,死狀恐怖支子,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情达舒,我是刑警寧澤值朋,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布叹侄,位于F島的核電站,受9級(jí)特大地震影響吞歼,放射性物質(zhì)發(fā)生泄漏圈膏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一篙骡、第九天 我趴在偏房一處隱蔽的房頂上張望稽坤。 院中可真熱鬧,春花似錦糯俗、人聲如沸尿褪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杖玲。三九已至,卻和暖如春淘正,著一層夾襖步出監(jiān)牢的瞬間摆马,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工鸿吆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囤采,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓惩淳,卻偏偏與公主長(zhǎng)得像蕉毯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子思犁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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