å ¨å±å¯¹è±¡æä¾å¯å¨ä»»ä½å°æ¹ä½¿ç¨çåéå彿°ãé»è®¤æ åµä¸ï¼è¿äºå ¨å±åéå 建äºè¯è¨æç¯å¢ä¸ã
卿µè§å¨ä¸ï¼å®çå忝 âwindowâï¼å¯¹ Node.js èè¨ï¼å®çå忝 âglobalâï¼å ¶å®ç¯å¢å¯è½ç¨çæ¯å«çååã
æè¿ï¼globalThis 被ä½ä¸ºå
¨å±å¯¹è±¡çæ ååç§°å å
¥å°äº JavaScript ä¸ï¼ææç¯å¢é½åºè¯¥æ¯æè¯¥åç§°ãææä¸»æµæµè§å¨é½æ¯æå®ã
å设æä»¬çç¯å¢æ¯æµè§å¨ï¼æä»¬å°å¨è¿å¿ä½¿ç¨ âwindowâãå¦æä½ çèæ¬å¯è½ä¼ç¨æ¥å¨å
¶ä»ç¯å¢ä¸è¿è¡ï¼åæå¥½ä½¿ç¨ globalThisã
å ¨å±å¯¹è±¡çææå±æ§é½å¯ä»¥è¢«ç´æ¥è®¿é®ï¼
alert("Hello");
// çåäº
window.alert("Hello");
卿µè§å¨ä¸ï¼ä½¿ç¨ varï¼è䏿¯ let/constï¼ï¼å£°æçå
¨å±å½æ°ååéä¼æä¸ºå
¨å±å¯¹è±¡ç屿§ã
var gVar = 5;
alert(window.gVar); // 5ï¼æä¸ºäºå
¨å±å¯¹è±¡ç屿§ï¼
彿°å£°æï¼ç¹æå¨ä¸»ä»£ç æµä¸å
·æ function å
³é®åçè¯å¥ï¼è䏿¯å½æ°è¡¨è¾¾å¼ï¼ä¹æè¿æ ·çææã
请ä¸è¦ä¾èµå®ï¼è¿ç§è¡ä¸ºæ¯åºäºå ¼å®¹æ§èåå¨çãç°ä»£èæ¬ä½¿ç¨ JavaScript modules æä»¥ä¸ä¼åçè¿ç§äºæ ã
妿æä»¬ä½¿ç¨ letï¼å°±ä¸ä¼åçè¿ç§æ
åµï¼
let gLet = 5;
alert(window.gLet); // undefinedï¼ä¸ä¼æä¸ºå
¨å±å¯¹è±¡ç屿§ï¼
妿ä¸ä¸ªå¼é常éè¦ï¼ä»¥è³äºä½ æ³ä½¿å®å¨å ¨å±èå´å å¯ç¨ï¼é£ä¹å¯ä»¥ç´æ¥å°å ¶ä½ä¸ºå±æ§åå ¥ï¼
// å°å½åç¨æ·ä¿¡æ¯å
¨å±åï¼ä»¥å
许ææèæ¬è®¿é®å®
window.currentUser = {
name: "John"
};
// 代ç ä¸çå¦ä¸ä¸ªä½ç½®
alert(currentUser.name); // John
// æè
ï¼å¦ææä»¬æä¸ä¸ªå为 "currentUser" çå±é¨åé
// ä» window æ¾å¼å°è·åå®ï¼è¿æ¯å®å
¨çï¼ï¼
alert(window.currentUser.name); // John
ä¹å°±æ¯è¯´ï¼ä¸è¬ä¸å»ºè®®ä½¿ç¨å ¨å±åéãå ¨å±åéåºå°½å¯è½çå°ãä¸ä½¿ç¨å¤é¨åéæå ¨å±åéç¸æ¯ï¼å½æ°è·åâè¾å ¥âåé并产çç¹å®âè¾åºâç代ç 设计æ´å æ¸ æ°ï¼ä¸æåºé䏿´æäºæµè¯ã
ä½¿ç¨ polyfills
æä»¬ä½¿ç¨å ¨å±å¯¹è±¡æ¥æµè¯å¯¹ç°ä»£è¯è¨åè½çæ¯æã
ä¾å¦ï¼æµè¯æ¯å¦åå¨å
建ç Promise 对象ï¼å¨çæ¬ç¹å«æ§çæµè§å¨ä¸ä¸åå¨ï¼ï¼
if (!window.Promise) {
alert("Your browser is really old!");
}
å¦ææ²¡æï¼ä¾å¦ï¼æä»¬ä½¿ç¨çæ¯æ§çæµè§å¨ï¼ï¼é£ä¹æä»¬å¯ä»¥å建 âpolyfillsâï¼æ·»å ç¯å¢ä¸æ¯æä½å¨ç°ä»£æ åä¸åå¨çåè½ã
if (!window.Promise) {
window.Promise = ... // å®å¶å®ç°ç°ä»£è¯è¨åè½
}
æ»ç»
-
å ¨å±å¯¹è±¡å å«åºè¯¥å¨ä»»ä½ä½ç½®é½å¯è§çåéã
å ¶ä¸å æ¬ JavaScript çå å»ºæ¹æ³ï¼ä¾å¦ âArrayâ åç¯å¢ç¹å®ï¼environment-specificï¼çå¼ï¼ä¾å¦
window.innerHeightâ æµè§å¨ä¸ççªå£é«åº¦ã -
å ¨å±å¯¹è±¡æä¸ä¸ªéç¨åç§°
globalThisãâ¦â¦ä½æ¯æ´å¸¸è§çæ¯ä½¿ç¨âèå¼âçç¯å¢ç¹å®ï¼environment-specificï¼çååï¼ä¾å¦
windowï¼æµè§å¨ï¼åglobalï¼Node.jsï¼ã -
ä» å½å¼å¯¹äºæä»¬ç项ç®èè¨ç¡®å®æ¯å ¨å±çæ¶åï¼æåºå°å ¶åå¨å¨å ¨å±å¯¹è±¡ä¸ãå¹¶ä¿æå ¶æ°éæå°ã
-
卿µè§å¨ä¸ï¼é¤éæä»¬ä½¿ç¨ modulesï¼å¦å使ç¨
var声æçå ¨å±å½æ°ååéä¼æä¸ºå ¨å±å¯¹è±¡ç屿§ã -
为äºä½¿æä»¬ç代ç é¢åæªæ¥å¹¶æ´æäºçè§£ï¼æä»¬åºè¯¥ä½¿ç¨ç´æ¥çæ¹å¼è®¿é®å ¨å±å¯¹è±¡ç屿§ï¼å¦
window.xã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼