浠€涔堟槸闂寘锛熼棴鍖呮槸Javascript涓竴涓壒鍒噸瑕佺殑姒傚康銆傝繖鏄疛avaScript涓嶅悓浜庤澶氬叾浠栬瑷€鐨勪竴涓濂囩壒鎬э細瀵逛簬涓€涓畾涔夎壇濂界殑A鍑芥暟锛屾棤璁轰綘鍦ㄥ摢閲岃皟鐢ㄥ畠锛屾€绘槸淇濇寔瀵瑰畾涔夊畠鐨勪笂涓嬫枃鐨勫紩鐢ㄣ€傜湅涓€涓緥瀛愶細functionfoo(){vara=2;鍑芥暟鏍忥紙锛墈console.log锛坅锛?}returnbar;}varbaz=foo();baz();//渚?涓紝baz鍑芥暟鏃犺鍦ㄥ摢閲岃皟鐢紝鎵ц缁撴灉閮戒細鏄痜oo鍑芥暟涓0鏄庣殑鍙橀噺a銆備綘鏈夋病鏈夎繖鏍风殑鐤戦棶锛氬彉閲廰鏄嚱鏁癴oo鐨勫眬閮ㄥ彉閲忥紝a搴旇鍦╢oo鎵ц瀹屾瘯鍚庨攢姣佸悧锛熶竴鑸潵璇达紝杩欐槸鐪熺殑锛堝叾浠栬瑷€锛孋锛孞ava涔熸槸濡傛锛夈€傚湪JavaScript涓紝鍑芥暟灞€閮ㄥ彉閲忕‘瀹炲湪娌℃湁褰㈡垚闂寘鐨勬儏鍐典笅琚攢姣侊紝浣嗘槸渚嬪瓙涓殑鍙橀噺a灞炰簬闂寘锛屾墍浠ヤ笉浼氳閿€姣併€傚洖鍒颁富棰橈紝浠€涔堟槸闂寘锛烳DN瀵归棴鍖呯殑瀹氫箟濡備笅锛氫竴涓嚱鏁颁笌瀵瑰叾鍛ㄥ洿鐘舵€侊紙璇嶆硶鐜锛宭exicalenvironment锛夌殑寮曠敤鎹嗙粦鍦ㄤ竴璧凤紙鎴栬€呭嚱鏁拌寮曠敤鍖呭洿锛夛紝杩欐牱鐨勭粍鍚堝氨鏄棴鍖呫€傪煉″叧浜庡懆鍥寸姸鎬侊紙璇嶆硶鐜锛夛紝璇嶆硶鐜鏄粠缂栬瘧鍣ㄧ殑瑙掑害鏉ョ湅鐨勩€傚浜庣▼搴忓憳鏉ヨ锛屽彲浠ョ悊瑙d负绋嬪簭鎵ц涓婁笅鏂囷紝鍗充綔鐢ㄥ煙閾俱€傞棴鍖呭拰浣滅敤鍩熻鎴戜滑鏉ョ湅鍙︿竴涓湁瓒g殑闂銆傛垜浠◢寰敼鍔ㄤ竴涓嬩唬鐮侊紝鍗冲湪涓婁竴鑺傜殑渚嬪瓙鐨勫熀纭€涓婂啀瀹氫箟涓€涓眬閮ㄥ彉閲廱銆傞棶棰樻槸锛歜鍦ㄩ棴鍖呬腑鍚楋紵鍑芥暟foo(){vara=2;鍙橀噺b=1;//瀹氫箟鍙︿竴涓眬閮ㄥ彉閲廸unctionbar(){console.log(a);}returnbar;}varbaz=foo();baz();//2鎴戜滑鐪嬩笅Chrome涓殑debug瀹炵幇锛氬湪debug鐜涓嬫垜浠彲浠ョ湅鍒帮細b涓嶅湪闂寘涓€傛垜浠繕鐪嬪埌锛屽綋鍓嶅嚱鏁版墽琛屾椂锛屼細鏈変竴涓笂涓嬫枃锛屽彨鍋歋cope锛屽畠鍖呮嫭锛歀ocal锛堟湰鍦帮級銆丆losure锛堥棴鍖咃級銆丟lobal锛堝叏灞€锛変笁绉嶄綔鐢ㄥ煙銆傜湅涓€涓婨CMAScript瑙勮寖涓璖cope鐨勫畾涔夛細鍦═able9鈥擨nternalPropertiesOnlyDefinedforSomeObjects涓紝鎴戜滑鍙互鐪嬪埌[[Scope]]鐨刅alueTypeDomain涓€鏍忕殑鍊间负LexicalEnvironment锛屼篃灏辨槸璇碵[Scope]]鏄竴涓瘝娉曠幆澧冿紝鍗冲嚱鏁版墽琛屼笂涓嬫枃锛屼綔鐢ㄥ煙閾俱€傘€婁綘涓嶇煡閬撶殑 Javascript銆嬬涓€鍗风5绔犲皢闂寘鎻忚堪涓轰綔鐢ㄥ煙闂寘銆傛垜瑙夊緱杩欐牱鎻忚堪姣旇緝鍑嗙‘锛屼篃姣旇緝璐磋繎鏈川銆傞棴鍖呭拰鍑芥暟鍥炶繃澶存潵鐪嬮棴鍖呯殑瀹氫箟锛氣€滀竴涓嚱鏁板強鍏跺懆鍥寸殑鐘舵€侊紙璇嶆硶鐜锛宭exicalenvironment锛?..鈥濓紝鏈枃棣栧厛璁ㄨ璇嶆硶鐜锛坰cope锛夛紝鍥犱负鎴戣寰楁湁蹇呰鐞嗚В闂寘瀵逛簬鍖咃紝棣栧厛瑕佺悊瑙d綔鐢ㄥ煙銆傚鍓嶆墍杩帮紝璋冪敤鑼冨洿闂寘鍙互鏇村噯纭湴鎻忚堪闂寘鐨勬€ц川銆傞棴鍖呭拰鍑芥暟鏈変粈涔堝叧绯伙紵鎴戣涓哄嚱鏁版槸闂寘褰㈡垚鐨勫熀鏈幆澧冦€傝繖鏄叾涓箣涓€銆傝€屼笖杩欎釜鍑芥暟涓嶆槸鍏ㄥ眬鍑芥暟锛屽洜涓哄叏灞€鍑芥暟鐨勮瘝娉曠幆澧冩槸Global锛岃€屼笉鏄疌losure锛屾墍浠ュ彲浠ヨ杩欎釜鍑芥暟鏄祵濂楀畾涔夊嚱鏁帮紝杩欐槸绗簩绉嶃€傜涓夛紝浠庝笂涓€鑺傜殑渚嬪瓙鎴戜滑鍙互鐪嬪嚭锛屽彧鏈夊閮ㄥ嚱鏁颁腑瀹氫箟鐨勫彉閲忔墠浼氬嚭鐜板湪闂寘涓紝涔熷氨鏄锛氳繖涓祵濂楀嚱鏁颁篃蹇呴』寮曠敤澶栭儴鍑芥暟涓畾涔夌殑鍙橀噺銆傚彟澶栵紝闂寘鐨勭濂囧拰寮哄ぇ鍦ㄤ簬锛孞avascript涓殑鍑芥暟鏄竴绛夊叕姘戯紝鍙互浣滀负鍙傛暟銆佽繑鍥炲€笺€佸彉閲忋€佸璞″睘鎬у€肩瓑锛屽嵆闂寘鍙互淇濆瓨鍜屼紶閫?鐪嬩竴涓満鏅渚嬶紙寮曠敤鑷狹DN锛夛細varmakeCounter=function(){varprivateCounter=0;鍑芥暟changeBy(val){privateCounter+=val;}return{increment:function(){changeBy(1);},閫掑噺:function(){changeBy(-1);},鍊?function(){returnprivateCounter;}}};varCounter1=makeCounter();varCounter2=makeCounter();console.log(Counter1.value());/*璁板綍0*/Counter1.increment();Counter1.increment();console.log(Counter1.value());/*璁板綍2*/Counter1.decrement();console.log(Counter1.value());/*璁板綍1*/console.log(Counter2.value());/*logs0*/浠ヨ繖绉嶆柟寮忎娇鐢ㄩ棴鍖呮彁渚涗簡璁稿涓庨潰鍚戝璞$紪绋嬬浉鍏崇殑濂藉鈥斺€旂壒鍒槸鏁版嵁闅愯棌鍜屽皝瑁呫€傛€荤粨鏈€鍚庯紝鎴戜滑鍙互寰楀嚭缁撹锛岄棴鍖呮槸涓€涓粦瀹氬埌澶栭儴浣滅敤鍩熺殑宓屽鍑芥暟銆傞棴鍖呯敓鎴愮殑涓や釜蹇呰鏉′欢锛氬祵濂楀畾涔夊嚱鏁帮紱宓屽鍑芥暟蹇呴』寮曠敤澶栭儴鍑芥暟涓畾涔夌殑鍙橀噺锛?/p>
