鍓嶈█JavaScript鏄竴绉嶈В閲婂瀷鍔ㄦ€佽瑷€锛屼絾鍚屾椂涔熸槸涓€绉嶅厖婊$绉樿壊褰╃殑璇█銆傚鏋滀綘鎯虫垚涓轰竴鍚嶄紭绉€鐨凧S寮€鍙戣€咃紝浣犻渶瑕佷簡瑙avaScript绋嬪簭鐨勫唴閮ㄦ墽琛屽師鐞嗐€傛湰鏂囧熀浜庢渶鏂扮殑ECMA瑙勮寖绗叓绔狅紝闃愭槑浜咼avaScript鐨勮瘝娉曠幆澧冨拰鎵ц涓婁笅鏂囩殑鐩稿叧鍐呭銆傝繖鏄悊瑙e叾浠朖avaScript姒傚康锛坙et/const涓存椂姝诲尯銆佸彉閲忔彁鍗囥€侀棴鍖呯瓑锛夌殑鍩虹銆傛湰鏂囧弬鑰冩渶鏂板彂甯冪殑绗崄浠CMA-262鏍囧噯锛屽嵆ES2019ES2019鍜孍S6鍦ㄨ瘝娉曠幆澧冨拰鎵ц涓婁笅鏂囨柟闈㈡槸鐩镐技鐨勩€侲S2019鍦ㄧ粏鑺備笂鍋氫簡涓€浜涜ˉ鍏咃紝鎵€浠ユ湰鏂囩洿鎺ラ噰鐢‥S2019鏍囧噯銆傛偍杩樺彲浠ユ瘮杈冩爣鍑嗙殑涓や釜鐗堟湰涔嬮棿鐨勫樊寮傘€傛墽琛屼笂涓嬫枃锛圗xecutionContext锛夋墽琛屼笂涓嬫枃鏄竴涓娊璞$殑姒傚康锛岀敤鏉ヨ窡韪拰璁板綍浠g爜鐨勮繍琛岀幆澧冦€傛瘡娆′唬鐮佽繍琛岄兘浼氱敓鎴愯嚦灏戜竴涓墽琛屼笂涓嬫枃銆備唬鐮佸湪鎵ц涓婁笅鏂囦腑杩愯銆備綘鍙互灏嗕唬鐮佽繍琛屽拰鎵ц涓婁笅鏂囦箣闂寸殑鍏崇郴绫绘瘮涓鸿繘绋嬪拰鍐呭瓨涔嬮棿鐨勫叧绯汇€備唬鐮佽繍琛岃繃绋嬩腑鐨勫彲鍙樼幆澧冧俊鎭斁鍦ㄦ墽琛屼笂涓嬫枃涓€傚綋浠g爜杩愯鏃讹紝鎵ц涓婁笅鏂囦篃浼氳閿€姣併€備唬鐮佹墽琛岃繃绋嬩腑鐨勭姸鎬佷俊鎭褰曞湪鎵ц涓婁笅鏂囦腑銆傛牴鎹笉鍚岀殑鎵ц鍦烘櫙锛屾墽琛屼笂涓嬫枃浼氱粏鍒嗕负浠ヤ笅鍑犵绫诲瀷锛氬叏灞€鎵ц涓婁笅鏂囷細褰撹繍琛岀殑浠g爜鍦ㄥ叏灞€鑼冨洿鍐呮椂锛屼細浜х敓涓€涓叏灞€鎵ц涓婁笅鏂囥€傝繖涔熸槸绋嬪簭鏈€鍩烘湰鐨勬墽琛屼笂涓嬫枃銆傚嚱鏁版墽琛屼笂涓嬫枃锛氳皟鐢ㄥ嚱鏁版椂锛屼細涓哄嚱鏁拌皟鐢ㄥ垱寤轰竴涓柊鐨勬墽琛屼笂涓嬫枃銆俥valexecutioncontext锛氬綋鎵цeval鍑芥暟鏃讹紝浼氱敓鎴愪竴涓笓鐢ㄤ簬瀹冪殑context銆傜敱浜巈val寰堝皯鐢ㄥ埌锛屽氨涓嶈璁轰簡銆傛湁浜嗘墽琛屾爤鐨勬墽琛屼笂涓嬫枃锛屽氨蹇呴』鏈夊伐鍏峰鍏惰繘琛屽悎鐞嗙殑绠$悊銆傛墽琛屾爤锛圗xecutionContextStack锛夋槸涓€绉嶆暟鎹粨鏋勶紝鐢ㄤ簬绠$悊鎵ц杩囩▼涓垱寤虹殑鎵€鏈夋墽琛屼笂涓嬫枃銆傚畠鏄竴涓狶IFO锛堝悗杩涘厛鍑猴級鏍堬紝涔熷氨鏄垜浠啛鐭ョ殑JS绋嬪簭杩愯杩囩▼涓殑璋冪敤鏍堛€傚綋绋嬪簭寮€濮嬭繍琛屾椂锛屼細鍒涘缓涓€涓叏灞€鎵ц涓婁笅鏂囧苟鍘嬪叆鎵ц鏍堬紝鐒跺悗姣忓綋璋冪敤鍑芥暟鏃讹紝閮戒細鍒涘缓涓€涓柊鐨勫嚱鏁版墽琛屼笂涓嬫枃骞跺帇鍏ユ爤銆傛垜浠粠涓€灏忔浠g爜鏉ョ湅鎵ц鏍堢殑宸ヤ綔杩囩▼锛?script>console.log('script')functionfoo(){functionbar(){console.log('bar',isNaN(undefined))}bar()console.log('foo')}foo()褰撹繖涓狫S绋嬪簭寮€濮嬭繍琛屾椂锛屼細鍒涘缓涓€涓叏灞€鎵ц涓婁笅鏂嘒lobalContext锛屽畠浼氬垵濮嬪寲涓€浜涘叏灞€瀵硅薄鎴栬€呭叏灞€鍑芥暟锛屾瘮濡傚湪浠g爜鎺у埗鍙帮紝undefined锛宨sNaN銆傚皢鍏ㄥ眬鎵ц涓婁笅鏂囨帹閫佸埌鎵ц鍫嗘爤銆傞€氬父锛孞S寮曟搸鏈変竴涓寚閽坮unning鎸囧悜鏍堥《鍏冪礌锛欽S寮曟搸浼氬湪鍏ㄥ眬涓婁笅鏂囦腑鍒濆鍖栧叏灞€浣滅敤鍩熷0鏄庣殑鍑芥暟锛坒oo锛夛紝鐒跺悗寮€濮嬮€愯鎵ц浠g爜锛岃繍琛屽埌杈炬帶鍒跺彴鏃讹紝鍦╮unning鎸囧悜鐨勮瘝娉曠幆澧冧腑鎵惧埌鍏ㄥ眬瀵硅薄console锛岃皟鐢╨og鍑芥暟銆侾S锛氬綋鐒讹紝鍦ㄨ皟鐢╨og鍑芥暟鐨勬椂鍊欙紝涔熼渶瑕佹柊寤轰竴涓嚱鏁颁笂涓嬫枃锛屽帇鍏ヨ皟鐢ㄦ爤銆傝繖閲屼负浜嗙畝鍗曡捣瑙侊紝蹇界暐浜嗘棩蹇椾笂涓嬫枃鐨勫垱寤鸿繃绋嬨€傚綋杩愯鍒癴oo()鏃讹紝瀹冭璇嗗埆涓哄嚱鏁拌皟鐢ㄣ€傝繖鏃讹紝鏂板缓涓€涓墽琛屼笂涓嬫枃FooContext锛屽苟鍏ユ爤銆傚皢FooContext涓瘝娉曠幆澧冪殑澶栧眰寮曠敤鎸囧悜鍏ㄥ眬鎵ц涓婁笅鏂囩殑璇嶆硶鐜锛屽苟绉诲姩杩愯鎸囬拡鎸囧悜杩欎釜鏂扮殑涓婁笅鏂囷細瀹屾垚FooContext鐨勫垱寤哄悗锛岃繘鍏ooContext缁х画鎵ц浠g爜銆傝繍琛屽埌bar()鏃讹紝浠嶇劧闇€瑕佹柊寤轰竴涓墽琛屼笂涓嬫枃BarContext銆傝繖鏃禕arContext涓瘝娉曠幆澧冪殑澶栧眰寮曠敤浼氭寚鍚慒ooContext鐨勮瘝娉曠幆澧冿細缁х画杩愯bar鍑芥暟锛屽洜涓哄嚱鏁颁笂涓嬫枃涓湁澶栧眰寮曠敤瀹炵幇閫愬眰閫掕繘寮曠敤锛屾墍浠ヤ粛鐒跺彲浠ヨ幏鍙朿onsole瀵硅薄锛屽湪bar鍑芥暟涓皟鐢╨og銆備箣鍚庯紝褰揵ar鍜宖oo鍑芥暟璋冪敤瀹屾垚鍚庯紝涓婁笅鏂囦細渚濇鍑烘爤锛岀洿鍒板叏灞€涓婁笅鏂囧嚭鏍堬紝绋嬪簭缁撴潫銆傛墽琛屼笂涓嬫枃鍒涘缓鎵ц涓婁笅鏂囧垱寤哄皢鍋氫袱浠朵簨锛氬垱寤鸿瘝娉曠幆澧僉exicalEnvironment锛涘垱寤哄彉閲忕幆澧僔ariableEnvironment锛涘洜姝わ紝鎵ц涓婁笅鏂囧湪姒傚康涓婂簲璇ユ槸杩欐牱鐨勶細ExecutionContext={LexicalEnvironment=,VariableEnvironment=,}鍦ㄥ叏灞€鎵ц涓婁笅鏂囦腑锛宼his鎸囧悜鍏ㄥ眬瀵硅薄锛屾祻瑙堝櫒涓殑window/nodejs涓殑global銆傚弬鑰冨墠绔珮绾ч潰璇曢璇﹁В璇嶆硶鐜锛圠exicalEnvironment锛塋exicalEnvironment鏄疎CMA涓殑涓€绉嶈鑼冪被鍨嬧€斺€斿熀浜庝唬鐮佺殑璇嶆硶宓屽缁撴瀯锛岀敤浜庤褰曟爣璇嗙涓庡叿浣撳彉閲忔垨鍑芥暟涔嬮棿鐨勫叧鑱斻€傜畝鍗曞湴璇达紝璇嶆硶鐜灏辨槸寤虹珛涓€涓爣璇嗙-鍙橀噺鏄犲皠琛ㄣ€傝繖閲岀殑鏍囪瘑绗︽槸鎸囧彉閲忓悕鎴栧嚱鏁板悕锛屽彉閲忔槸瀹為檯鐨勫彉閲忓師鍊兼垨瀵硅薄/鍑芥暟鐨勫紩鐢ㄥ湴鍧€銆侺exicalEnvironment鐢变袱閮ㄥ垎缁勬垚锛氱幆澧冭褰旹nvironmentRecord锛氬彉閲忓拰鍑芥暟澹版槑瀛樻斁鐨勫湴鏂癸紱outerreferenceouter锛氭彁渚涜闂埗璇嶆硶鐜鐨勫紩鐢紝鍙互涓簄ull锛泃hisbindingThisBinding锛氬喅瀹氬綋鍓嶇幆澧冧腑this鐨勫€兼寚鍚戯紝thisbinding淇濆瓨鍦‥nvironmentRecord涓紱璇嶆硶鐜鐨勭被鍨嬪叏灞€鐜锛圙lobalEnvironment锛夛細鍦↗avaScript浠g爜寮€濮嬭繍琛屾椂锛屽涓伙紙娴忚鍣ㄣ€丯odeJs绛夛級浼氭彁鍓嶅垵濮嬪寲鍏ㄥ眬鐜锛屽唴缃幆澧冧細缁戝畾鍦‥nvironmentRecord涓叏灞€鐜鍏ㄥ眬瀵硅薄锛圛nfinity绛夛級鎴栧叏灞€鍑芥暟锛坋val銆乸arseInt绛夛級锛屽叾浠栧0鏄庣殑鍏ㄥ眬鍙橀噺鎴栧嚱鏁颁篃瀛樺偍鍦ㄥ叏灞€璇嶆硶鐜涓€傚叏灞€鐜鐨勫閮ㄥ紩鐢ㄤ负绌恒€傝繖閲屾墍璇寸殑鍏ㄥ眬瀵硅薄鍖呮嫭鎴戜滑鐔熸倝鐨勬墍鏈夊唴缃璞★紝渚嬪Math銆丱bject銆丄rray绛夋瀯閫犲嚱鏁帮紝浠ュ強Infinity绛夊叏灞€鍙橀噺銆傚叏灞€鍑芥暟鍖呮嫭eval銆乸arseInt绛夊嚱鏁般€傛ā鍧楃幆澧冿紙ModuleEnvironment锛夛細濡傛灉浣犲啓杩嘚odeJs绋嬪簭锛屼綘灏变細鐔熸倝杩欎釜鐜銆傚湪妯″潡鐜涓紝鍙互璇诲彇export銆乵odule绛夊彉閲忋€傝繖浜涘彉閲忚褰曞湪妯″潡鐜鐨凟R涓€傛ā鍧楃幆澧冪殑澶栭儴寮曠敤鎸囧悜鍏ㄥ眬鐜銆傚嚱鏁扮幆澧冿紙FunctionEnvironment锛夛細姣忔璋冪敤鍑芥暟閮戒細浜х敓涓€涓嚱鏁扮幆澧冿紝浼氭秹鍙婂埌this鐨勭粦瀹氭垨鑰卻uper鐨勮皟鐢ㄣ€傚嚱鏁扮殑闀垮害鍜屽弬鏁板睘鎬т篃璁板綍鍦‥R涓€傚嚱鏁扮幆澧冪殑澶栭儴寮曠敤鎸囧悜璋冪敤璇ュ嚱鏁扮殑鐖剁幆澧冦€傚湪鍑芥暟浣撳唴澹版槑鐨勫彉閲忔垨鍑芥暟璁板綍鍦ㄥ嚱鏁扮幆澧冧腑銆傚湪鐜璁板綍ER浠g爜涓0鏄庣殑鍙橀噺鍜屽嚱鏁颁細琚繚瀛樺湪EnvironmentRecord涓紝绛夊緟鎵ц鏃惰闂€傜幆澧冭褰旹nvironmentRecord涔熸湁涓ょ涓嶅悓鐨勭被鍨嬶紝鍗冲0鏄庡紡鍜屽璞″紡銆侱eclarative鏄竴绉嶆瘮杈冨父瑙佺殑绫诲瀷锛岄€氬父鍑芥暟澹版槑鍜屽彉閲忓0鏄庨兘浼氱敓鎴愯繖绉嶇被鍨嬬殑ER銆傚璞$被鍨嬪彲浠ラ€氳繃with璇彞瑙﹀彂锛寃ith鐨勪娇鐢ㄥ緢灏戯紝涓€鑸紑鍙戣€呬篃寰堝皯鐢ㄥ埌銆傚鏋滃湪鍑芥暟浣撲腑閬囧埌varconstletclassmoduleimport杩欐牱鐨勫嚱鏁板0鏄庯紝閭d箞鐜璁板綍灏辨槸澹版槑绫诲瀷鐨勩€傚€煎緱涓€鎻愮殑鏄紝鍏ㄥ眬涓婁笅鏂囩殑ER鏈夌偣鐗规畩锛屽洜涓哄畠鏄痮bjectER鍜宒eclarativeER鐨勬贩鍚堜綋銆傚璞R涓瓨鍌ㄧ殑鏄叏灞€瀵硅薄鍑芥暟銆佸嚱鏁板嚱鏁板0鏄庛€乤sync銆乬enerator鍜寁ar鍏抽敭瀛楀彉閲忋€傚湪澹版槑寮廍R涓紝瀛樺偍鐨勬槸鍏朵粬鏂瑰紡澹版槑鐨勫彉閲忥紝姣斿letconstclass绛夈€傜敱浜庢爣鍑嗕腑灏唎bject绫诲瀷鐨凟R瑙嗕负baseER锛屾墍浠ヨ繖閲屾垜浠繕鏄皢globalER鐨勭被鍨嬭涓簅bject銆侴lobalExecutionContext={LexicalEnvironment:{EnvironmentRecord:{type:'object',//娣峰悎瀵硅薄+澹版槑this:,NaN,parseInt,Object,myFunc,a,b,...},outer:null,}}LexicalEnvironment鍙瓨鍌ㄥ嚱鏁板0鏄庣殑鍙橀噺鍜宭et/const锛屼笌涓嬮潰鐨刅ariableEnvironment涓嶅悓銆備緥濡傦紝鎴戜滑鏈夊涓嬩唬鐮侊細leta=10;functionfoo(){letb=20console.log(a,b)}foo()//瀹冧滑鐨勮瘝娉曠幆澧冧吉浠g爜濡備笅锛欸lobalEnvironment:{EnvironmentRecord:{type:'object',this:,a:,foo:},outer:}FunctionEnvironment:{EnvironmentRecord:{type:'declarative',this:,//涓ユ牸妯″紡涓嬩负undefinedarguments:{length:0},b:},outer:}鍑芥暟鐜璁板綍鐢变簬鍑芥暟鐜鏄垜浠棩甯稿紑鍙戣繃绋嬩腑鏈€甯歌鐨勮瘝娉曠幆澧冿紝鎴戜滑闇€瑕佹洿娣卞叆鍦扮爺绌跺嚱鏁扮幆澧冪殑杩愯鏈哄埗锛屾湁鍔╀簬鎴戜滑鏇村ソ鍦扮悊瑙d竴浜涜瑷€鐗规€с€傚綋鎴戜滑璋冪敤涓€涓嚱鏁版椂锛屼細鐢熸垚涓€涓嚱鏁版墽琛屼笂涓嬫枃銆傝繖涓嚱鏁版墽琛屼笂涓嬫枃鐨勮瘝娉曠幆澧冪殑鐜璁板綍鏄竴涓嚱鏁扮被鍨嬶紝鏈夌偣鍟板棪銆傜敤鏍戠姸鍥炬潵琛ㄧず锛欶unctionContext|LexicalEnvironment|EnvironmentRecord//-->functiontype涓轰粈涔堝己璋冭繖涓被鍨嬶紵鍥犱负ECMA浼氫负鍔熻兘鐜璁板綍澧炲姞涓€浜涢澶栫殑鍐呴儴灞炴€э細鍐呴儴灞炴€alue鐨勬弿杩拌ˉ鍏匸[ThisValue]]鍦ˋny鍑芥暟涓皟鐢╰his鏃跺紩鐢ㄧ殑鍦板潃銆傛垜浠父璇寸殑鍑芥暟thisbinding鏄粰杩欎釜鍐呴儴灞炴€ц祴鍊糩[IfThisBindingStatus]]"lexical"/"initialized"/"uninitialized"绛変簬lexical锛屽畠鏄竴涓澶村嚱鏁帮紝涔熷氨鏄this鏄┖鐨?寮哄埗浣跨敤鏂扮殑绠ご鍑芥暟灏嗘姤鍛奣ypeError閿欒銆侳unctionObjectObject鍦ㄨ繖涓璞′腑鏈変袱涓睘鎬[Call]]鍜孾[Construct]]锛屽畠浠兘鏄嚱鏁帮紝濡備綍璧嬪€煎彇鍐充簬濡備綍璋冪敤鍑芥暟銆傛櫘閫氬嚱鏁拌皟鐢ㄨ祴鍊糩[Call]]锛岄€氳繃new鎴杝uper璋冪敤鍑芥暟璧嬪€糩[Construct]][[HomeObject]]Object/undefined濡傛灉鍑芥暟锛堥潪绠ご鍑芥暟锛夋湁super灞炴€э紙瀛愮被锛夛紝[[HomeObject]]鎸囧悜鐖剁被鐨勬瀯閫犲嚱鏁板鏋滀綘鍐欒繃extends锛屽氨鐭ラ亾鎴戝湪璇翠粈涔堟槸闈炵┖鐨勶紝杩欎釜鍐呴儴灞炴€у彲浠ラ€氳繃鍑芥暟涓殑new.target鏉ヨ鍙栥€傞櫎浜嗛€氳繃new鍒ゆ柇鍑芥暟鏄惁琚皟鐢ㄥ锛屽嚱鏁扮幆澧冭褰曚腑杩樻湁涓€涓猘rguments瀵硅薄锛岃褰曚簡鍑芥暟鐨勫叆鍙備俊鎭€俆hisBinding杩欎釜缁戝畾鏄竴涓€佹帀鐗欑殑闂銆傜敱浜庡瓨鍦ㄥ悇绉嶅垎鏋愬満鏅紝杩欓噷涓嶄究灞曞紑銆倀his缁戝畾鐨勭洰鐨勬槸鍦ㄥ垱寤烘墽琛屼笂涓嬫枃鏃舵槑纭畉his鐨勬柟鍚戯紝骞跺湪鍑芥暟鎵ц鏃惰鍙栨纭殑this寮曠敤銆傜洰鐨勩€傛€荤粨姒傚康绫诲瀷澶锛屾湁浜涙瘮杈冧贡銆傜畝鍐欙細lexicalenvironmentcategory=global/function/modulelexicalenvironment=ER+outer+thisERcategory=declarative(DER)+object(OER)globalER=DER+OERVariableEnvironment鍙橀噺鐜鍦‥S6涔嬪墠锛岄€氳繃var鍏抽敭瀛楀0鏄庡彉閲?ES6鎻愬€′娇鐢╨et鍜宑onst鏉ュ0鏄庡彉閲忋€備负浜嗗吋瀹箆ar鐨勫啓娉曪紝浣跨敤鍙橀噺鐜鏉ュ瓨鏀緑ar澹版槑鐨勫彉閲忋€倂ar鍏抽敭瀛楁湁涓€涓壒鎬э紝鍙互璁╁彉閲忚鎻愬崌锛岃€岄€氳繃let/const澹版槑鐨勫彉閲忎笉浼氳鎻愬崌銆備负浜嗗尯鍒嗚繖涓ょ鎯呭喌锛屼娇鐢ㄤ簡涓嶅悓鐨勮瘝娉曠幆澧冩潵鍖哄垎瀹冧滑銆傚彉閲忕幆澧冩湰璐ㄤ笂杩樻槸涓€涓瘝娉曠幆澧冿紝鍙槸瀛樻斁浜唙ar澹版槑鐨勫彉閲忥紝杩欐牱鍦ㄥ彉閲忓垵濮嬪寲鐨勬椂鍊欏氨鍙互璧嬪€紆ndefined銆傛湁浜嗚繖浜涙蹇碉紝涓€涓畬鏁寸殑鎵ц涓婁笅鏂囧簲璇ユ槸浠€涔堟牱瀛愮殑鍛紵杩欐槸涓€涓緥瀛愷煂帮細leta=10;constb=20;varsum;functionadd(e,f){vard=40;returnd+e+f}letutils={add}sum=utils.add(a,b)瀹屾暣鐨勬墽琛屼笂涓嬫枃濡備笅锛欸lobalExecutionContext={LexicalEnvironment:{EnvironmentRecord:{type:'object',this:锛屾坊鍔狅細锛宎锛?uninitialized>锛宐锛?uninitialized>锛寀tils锛?uninitialized>}锛宱uter锛歯ull}锛孷ariableEnvironment锛歿EnvironmentRecord锛歿type锛?object'锛宼his锛?globalObject>鎬诲拰:undefined},outer:null},}//鍙湁褰撳嚱鏁癮dd杩愯鏃舵墠浼氬垱寤哄嚱鏁版墽琛屼笂涓嬫枃FunctionExecutionContext={LexicalEnvironment:{EnvironmentRecord:{type:'declarative',this:,arguments:{0:10,1:20,闀垮害:2},[[NewTarget]]:undefined,e:10,f:20,...},outer:},VariableEnvironment:{EnvironmentRecord:{type:'declarative',this:d:undefined,},outer:},}鎵ц涓婁笅鏂囧垱寤轰箣鍚庤繘鍏ユ墽琛岀幆鑺傦紝鍦ㄦ墽琛岃繃绋嬩腑瀵瑰彉閲忚繘琛岃祴鍊笺€佽鍙栥€侀噸鏂拌祴鍊硷紝鐩村埌绋嬪簭缁撴潫銆傛垜浠敞鎰忓埌鍦ㄥ垱寤烘墽琛屼笂涓嬫枃鏃讹紝鍙橀噺a`b閮芥槸锛宻um鍒濆鍖栦负undefined銆傝繖灏辨槸涓轰粈涔堝湪澹版槑锛堝彉閲忔彁鍗囷級涔嬪墠鍙互璁块棶var瀹氫箟鐨勫彉閲忥紝鑰岃闂甽et/const`瀹氫箟鐨勫彉閲忎細鎶ュ紩鐢ㄩ敊璇€俵et/const鍜寁ar閮芥槸鍙橀噺澹版槑銆傚畠浠箣闂存湁浠€涔堝尯鍒紵let鍜宑onst鐨勫尯鍒繖閲屼笉鍐嶈禈杩般€備粠涓婁竴鑺傛垜浠煡閬擄紝let/const澹版槑鐨勫彉閲忓睘浜嶭exicalEnvironment锛岃€寁ar澹版槑鐨勫彉閲忓睘浜嶸ariableEnvironment銆傚垵濮嬪寲锛堣瘝娉曢樁娈碉級let/const鍦ㄥ垵濮嬪寲鐨勬椂鍊欎細琚缃负鏍囧織锛屽綋鍏蜂綋琛宭etxxx鎴栬€卨etxxx=???(assignmentline)娌℃湁鎵ц锛屽鏋滃彉閲忚鎻愬墠璇诲彇閿欒浼氭姤ReferenceError銆傦紙杩欎釜鐗规€т篃鍙复鏃舵鍖猴級var鍦ㄥ垵濮嬪寲鐨勬椂鍊欙紝棣栧厛璧嬪€间负undefined銆傚嵆浣夸笉鎵ц璧嬪€艰锛寁ar鍙橀噺锛坲ndefined锛変粛鐒跺彲浠ヨ璇诲彇銆傚潡鐜璁板綍(blockscope)ECMA鏍囧噯涓彁鍒帮紝褰撻亣鍒癇lock鎴朇aseBlock鏃讹紝浼氬垱寤轰竴涓柊鐨勭幆澧冭褰曪紝block涓0鏄庣殑let/const鍙橀噺銆佸嚱鏁般€佺被浼氬瓨鍌ㄨ繖涓柊鐨別nvironmentrecord锛岃繖浜涘彉閲忔槸鍜屽潡寮虹粦瀹氱殑锛屽潡澶栦笉鑳借鍙栬繖浜涘0鏄庣殑鍙橀噺銆傛鍔熻兘绉颁负鍧椾綔鐢ㄥ煙銆備粈涔堟槸鍧楋紵鍧楁嫭鍦ㄥぇ鎷彿({})涓€傚潡鍐呯殑let/const鍙橀噺鍙湪鍧楀唴鏈夋晥锛屽潡鍐呯殑鍙橀噺鏃犳硶鍦ㄥ潡澶栬鍙栥€倂ar鍙橀噺涓嶅彈姝ら檺鍒躲€備笉绠ar鍦ㄥ摢閲岋紝鍙橀噺閮戒細琚彁鍗噡鍜孍S3鐨勫尯鍒鏋滀綘浜嗚В浜咵S5鐗堟湰鐨勬墽琛屼笂涓嬫枃鍐呭锛屼綘浼氬鎬负浠€涔圴O銆丄O銆佷綔鐢ㄥ煙銆佷綔鐢ㄥ煙閾剧瓑鍐呭娌℃湁鏈枃涓彁鍒般€傚叾瀹炶繖涓や釜姒傚康骞朵笉鍐茬獊銆備竴绉嶆槸ES3瑙勮寖涓殑瀹氫箟锛岃瘝娉曠幆澧冩槸ES6瑙勮寖涓殑瀹氫箟銆備笉鍚岀殑鏃朵唬锛屼笉鍚岀殑绉板懠銆侲S3-->ES6scope-->Lexicalenvironmentscopechain-->outerreferenceVO|AO-->Environmentrecord锛屾垜璇ュ鍝竴涓紵绔嬭冻褰撲笅锛岄摥璁板巻鍙诧紝鎷ユ姳鏈潵銆傜患涓婃墍杩帮紝杩欑瘒鏂囩珷鏈夊緢澶氬叧浜庢墽琛屼笂涓嬫枃鐨勭悊璁虹煡璇嗭紝鎯宠涓€涓嬪瓙鍚告敹鐞嗚В骞朵笉瀹规槗銆傚缓璁ぇ瀹舵參鎱㈡秷鍖栵紝鍙嶅闃呰鐞嗚В銆傚綋浣犵啛鎮変簡鎵ц涓婁笅鏂囧拰璇嶆硶鐜鍚庯紝鐩镐俊浼氭洿瀹规槗鐞嗚В鏇村鐨凧S鐗规€у拰姒傚康銆?/p>