è¯æ³è¯æ³
è¿é¨åæè¿°äº JavaScript çè¯æ³ï¼lexical grammarï¼ãECMAScript æºç ææ¬ä¼è¢«ä»å·¦å°å³æ«æï¼å¹¶è¢«è½¬æ¢ä¸ºä¸ç³»åçè¾å ¥å ç´ ï¼å æ¬ tokenãæ§å¶ç¬¦ãè¡ç»æ¢ç¬¦ã注éå空ç½ç¬¦ãECMAScript å®ä¹äºä¸äºå ³é®åãåé¢é以åè¡å°¾åå·è¡¥å ¨çè§åã
æ ¼å¼æ§å¶ç¬¦
æ ¼å¼æ§å¶ç¬¦ç¨äºæ§å¶å¯¹æºç ææ¬çè§£éï¼ä½æ¯å¹¶ä¸ä¼æ¾ç¤ºåºæ¥ã
| 代ç ç¹ | åç§° | 缩å | 说æ |
|---|---|---|---|
U+200C |
é¶å®½åº¦éç»åå | <ZWNJ> | æ¾ç½®å¨ä¸äºç»å¸¸ä¼è¢«å½æè¿åçå符ä¹é´ï¼ç¨äºå°å®ä»¬åå«ä»¥ç¬ç«å½¢å¼æ¾ç¤ºï¼Wikipediaï¼ |
U+200D |
é¶å®½åº¦ç»åå | <ZWJ> | æ¾ç½®å¨ä¸äºé常ä¸ä¼è¢«æ 记为è¿åçå符ä¹é´ï¼ç¨äºå°è¿äºå符以è¿å形弿¾ç¤ºï¼Wikipediaï¼ |
U+FEFF |
åèæµæ¹åæ è¯ | <BOM> | å¨èæ¬å¼å¤´ä½¿ç¨ï¼é¤äºå°èæ¬æ 记为 Unicode æ ¼å¼ä»¥å¤ï¼è¿ç¨æ¥æ è®°ææ¬çåèæµæ¹åï¼Wikipediaï¼ |
空ç½ç¬¦
空ç½ç¬¦æåäºæºç çå¯è¯»æ§ï¼å¹¶å°æ è®° (tokens) åºåå¼ãè¿äºç¬¦å·é常ä¸å½±åæºç çåè½ãé常å¯ä»¥ç¨åç¼©å¨æ¥ç§»é¤æºç ä¸ç空ç½ï¼åå°æ°æ®ä¼ è¾éã
| 代ç ç¹ | åç§° | 缩å | 说æ | 转ä¹åºå |
|---|---|---|---|---|
| U+0009 | å¶è¡¨ç¬¦ | <HT> | æ°´å¹³å¶è¡¨ç¬¦ | \t |
| U+000B | åç´å¶è¡¨ç¬¦ | <VT> | åç´å¶è¡¨ç¬¦ | \v |
| U+000C | å页符 | <FF> | å页符ï¼Wikipediaï¼ | \f |
| U+0020 | ç©ºæ ¼ | <SP> | ç©ºæ ¼ | |
| U+00A0 | æ é´æç©ºæ ¼ | <NBSP> | å¨è¯¥ç©ºæ ¼å¤ä¸ä¼æ¢è¡ | |
| Others | å ¶ä» Unicode ç©ºç½ | <USP> | Wikipedia ä¸å¯¹ Unicode 空ç½çä»ç» |
è¡ç»æ¢ç¬¦
é¤äºç©ºç½ç¬¦ä¹å¤ï¼è¡ç»æ¢ç¬¦ä¹å¯ä»¥æé«æºç çå¯è¯»æ§ãä¸åçæ¯ï¼è¡ç»æ¢ç¬¦å¯ä»¥å½±å JavaScript 代ç çæ§è¡ãè¡ç»æ¢ç¬¦ä¹ä¼å½±åèªå¨åå·è¡¥å ¨çæ§è¡ã卿£å表达å¼ä¸ï¼è¡ç»æ¢ç¬¦ä¼è¢« \s å¹é ã
å¨ ECMAScript ä¸ï¼åªæä¸å Unicode å符ä¼è¢«å½æè¡ç»æ¢ç¬¦ï¼å ¶ä»çè¡ç»æ¢ç¬¦ï¼æ¯å¦ Next LineãNELãU+0085 çï¼é½ä¼è¢«å½æç©ºç½ç¬¦ã
注é
注éç¨æ¥å¨æºç ä¸å¢å æç¤ºãç¬è®°ã建议ãè¦åçä¿¡æ¯ï¼å¯ä»¥å¸®å©é 读åçè§£æºç ãå¨è°è¯æ¶ï¼å¯ä»¥ç¨æ¥å°ä¸æ®µä»£ç å±è½æï¼é²æ¢å ¶è¿è¡ï¼è¿ä¹æ¯ä¸ä¸ªæä»·å¼çè°è¯å·¥å ·ã
å¨ JavaScript ä¸ï¼æä¸¤ç§å¸¸è§çæ·»å æ³¨éçæ¹æ³ï¼è¡æ³¨éååæ³¨éãå¦å¤ï¼ä¹æä¸ç§ç¹æ®ç hashbang 注éè¯æ³ã
è¡æ³¨é
第ä¸ç§æ¯ // 飿 ¼ç注éï¼ä¼å°è¯¥è¡ä¸ç¬¦å·ä»¥åçææ¬é½è§ä¸ºæ³¨éï¼
function comment() {
// è¿æ¯åè¡æ³¨é
console.log("Hello world!");
}
comment();
åæ³¨é
第äºç§æ¯ /* */ 飿 ¼ç注éï¼è¿ç§æ¹å¼æ´å çµæ´»ï¼
æ¯å¦ï¼å¯ä»¥å¨åè¡å 使ç¨å¤è¡æ³¨éï¼
function comment() {
/* è¿æ¯åè¡æ³¨é */
console.log("Hello world!");
}
comment();
ä¹å¯ä»¥ç¨æ¥å®ç°å¤è¡æ³¨éï¼
function comment() {
/* è¿æ¯å¤è¡æ³¨éï¼
注æå¨å宿³¨éåæ éç»æ¢æ³¨é */
console.log("Hello world!");
}
comment();
å¤è¡æ³¨éä¹å¯ä»¥ç¨äºè¡å 注éï¼ä½è¿æ ·ä¼ä½¿ä»£ç å¯è¯»æ§åå·®ï¼æä»¥è¦è°¨æ 使ç¨ï¼
function comment(x) {
console.log("Hello " + x /* å¼å
¥ x çå¼ */ + " !");
}
comment("world");
å¦å¤ï¼å注éä¹å¯ä»¥ç¨æ¥å±è½ä¸æ®µä»£ç ï¼åªè¦å°è¿æ®µä»£ç ç¨å注éå 裹起æ¥å°±å¯ä»¥äºï¼
function comment() {
/* console.log("Hello world!"); */
}
comment();
è¿ç§æ
åµä¸ï¼æ³¨éä¸ç console.log() çè°ç¨å§ç»æ æãè¿ç§æ¹å¼å¯ä»¥å±è½ä»»æå¤è¡ç代ç ï¼ä¹å¯ä»¥å±è½ä¸è¡ä»£ç çä¸é¨åã
å å«è³å°ä¸ä¸ªè¡ç»æç¬¦çåç¶æ³¨éçè¡ä¸ºä¸èªå¨åå·æå ¥ä¸çè¡ç»æç¬¦ç¸ä¼¼ã
Hashbang 注é
Hashbang æ³¨éæ¯ä¸ç§ç¹æ®ç注éè¯æ³ï¼å
¶è¡ä¸ºä¸åè¡æ³¨éï¼//ï¼å®å
¨ä¸æ ·ï¼åªæ¯å®ä»¥ #! å¼å¤´ï¼å¹¶ä¸åªå¨èæ¬ææ¨¡åçæå¼å§å¤ææã注æï¼#! æ å¿ä¹åä¸è½æä»»ä½ç©ºç½åç¬¦ãæ³¨éç± #! ä¹åçææåç¬¦ç»æç´å°ç¬¬ä¸è¡çæ«å°¾ï¼åªå
许æä¸æ¡è¿æ ·ç注éãJavaScript ä¸ç hashbang 注éç±»ä¼¼äº Unix ä¸ç shebangï¼å®æä¾äºä¸ä¸ªç¹å®ç JavaScript è§£éå¨çè·¯å¾ï¼ä½ æ³ç¨å®æ¥æ§è¡è¿ä¸ªèæ¬ãå¨ hashbang æ³¨éæ ååä¹åï¼å®å·²ç»å¨éæµè§å¨ä¸»æºï¼å¦ Node.jsï¼ä¸å¾å°äºäºå®ä¸çå®ç°ï¼å¨é£éï¼å®å¨è¢«ä¼ éç»å¼æä¹åè¢«ä»æºææ¬ä¸å¥ç¦»ã示ä¾å¦ä¸ï¼
#!/usr/bin/env node
console.log("Hello world");
JavaScript çè§£éå¨ä¼æå®è§ä¸ºæ®é注éââåªæå½èæ¬ç´æ¥å¨ shell ä¸è¿è¡æ¶ï¼å®å¯¹ shell ææè¯ä¹æä¹ã
è¦åï¼å¦æä½ æ³è®©èæ¬ç´æ¥å¨ shell ç¯å¢ä¸è¿è¡ï¼è¯·ç¨ä¸å« BOM ç UTF-8 ç¼ç ãè½ç¶ BOM ä¸ä¼å¯¹å¨æµè§å¨ä¸è¿è¡ç代ç é æä»»ä½é®é¢ââå¨ UTF-8 è§£ç è¿ç¨ä¸ï¼åææºææ¬ä¹åï¼BOM 就已ç»è¢«å¥ç¦»äºââä½å¦æå颿ä¸ä¸ª BOM å符ï¼Unix/Linux shell å°±ä¸ä¼è¯å«è¯¥æ³¨éã
ä½ åªè½ä½¿ç¨ #! æ³¨éæ ·å¼ä»¥æå® JavaScript è§£éå¨ã卿æå
¶ä»æ
åµä¸ï¼åªéä½¿ç¨ // 注éï¼æå¤è¡æ³¨éï¼ã
æ è¯ç¬¦
æ è¯ç¬¦ç¨äºå°å¼ä¸ååè¿è¡è¿æ¥ãæ è¯ç¬¦å¯ä»¥ç¨äºåç§åºåï¼
const decl = 1; // åé声æï¼ä¹å¯è½æ¯ `let` æ `var`ï¼
function fn() {} // 彿°å£°æ
const obj = { key: "value" }; // 对象é®
// 类声æ
class C {
#priv = "value"; // ç§æå±æ§
}
lbl: console.log(1); // æ ç¾
å¨ JavaScript ä¸ï¼æ è¯ç¬¦é常ç±åæ¯æ°åå符ãä¸å线ï¼_ï¼åç¾å
符å·ï¼$ï¼ç»æãæ è¯ç¬¦ä¸å
许以æ°åå¼å¤´ãç¶èï¼JavaScript æ è¯ç¬¦ä¸åªéäº ASCIIââè®¸å¤ Unicode 代ç ç¹ä¹æ¯è¢«å
许çãä¹å°±æ¯è¯´ï¼
- èµ·å§å符å¯ä»¥æ¯ ID_Start ç±»å«å
_å$ä¸çä»»æå符ã - å¨ç¬¬ä¸ä¸ªå符ä¹åï¼ä½ å¯ä»¥ä½¿ç¨ ID_Continue ç±»å«å U+200Cï¼ZWNJï¼å U+200Dï¼ZWJï¼ä¸çä»»æå符ã
夿³¨ï¼å¦æï¼åºäºæäºåå ï¼ä½ éè¦èªå·±è§£æä¸äº JavaScript æºï¼ä¸è¦å设ææçæ è¯ç¬¦éµå¾ª /[A-Za-z_$][\w$]*/ 模å¼ï¼ä¾å¦ï¼ä»
ASCIIï¼ï¼æ è¯ç¬¦çèå´å¯ä»¥ç±æ£åè¡¨è¾¾å¼ /[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*/uï¼ä¸å
å« unicode 转ä¹åºåï¼æè¿°ã
æ¤å¤ï¼JavaScript å
è®¸å¨æ è¯ç¬¦ä¸ä»¥ \u0000 æ \u{000000}çå½¢å¼ä½¿ç¨ Unicode 转ä¹åºåï¼èè¿ä¼å°ç¸åçå符串å¼ç¼ç 为å®é
ç Unicode å符ãä¾å¦ï¼ä½ 好 å \u4f60\u597d æ¯ä¸æ ·çæ è¯ç¬¦ï¼
const ä½ å¥½ = "ä½ å¥½";
console.log(\u4f60\u597d); // ä½ å¥½
䏿¯ææçåºå齿¥åå ¨é¨å¯è½çæ è¯ç¬¦ãç¹å®çè¯æ³ï¼ä¾å¦ï¼å½æ°å£°æã彿°è¡¨è¾¾å¼ååé声æï¼è¦æ±ä½¿ç¨çæ è¯ç¬¦ååä¸è½æ¯ä¿çåã
function import() {} // éæ³ï¼import æ¯ä¿çåã
ç¹å«çï¼ç§æå±æ§åå¯¹è±¡å±æ§å 许æ¯ä¿çåã
const obj = { import: "value" }; // åæ³çï¼å°½ç®¡ `import` æ¯ä¿çå
class C {
#import = "value";
}
å ³é®å
å
³é®åæ¯ JavaScript ä¸çèµ·æ¥åæ è¯ç¬¦ä½åå
·æç¹æ®å«ä¹çæ è®°ãä¾å¦ï¼å¨å½æ°å£°æä¹åç async å
³é®åè¡¨ç¤ºè¯¥å½æ°æ¯å¼æ¥çã
ä¸äºå
³é®åæ¯ä¿ççï¼è¿æå³çå®ä»¬ä¸è½è¢«ç¨ä½åé声æã彿°å£°æççæ è¯ç¬¦ãå®ä»¬é常被称为ä¿çåãä¸é¢æä¾äºè¿äºä¿çåçå表ã并䏿¯ææçå
³é®å齿¯ä¿ççââä¾å¦ï¼async å¯ä»¥å¨ä»»ä½å°æ¹ç¨ä½æ è¯ç¬¦ãä¸äºå
³é®ååªæ¯å¨ä¸ä¸æä¸ä¿çââä¾å¦ï¼await åªå¨å¼æ¥å½æ°ä½å
ä¿çï¼let åªå¨ä¸¥æ ¼æ¨¡å¼ä»£ç ä¸ï¼æ const å let 声æä¸ä¿çã
æ è¯ç¬¦æ»æ¯éè¿å符串å¼è¿è¡æ¯è¾ï¼æä»¥è½¬ä¹åºåä¼è¢«è§£éãä¾å¦ï¼è¿ä¹æ¯ä¸ä¸ªè¯æ³é误ï¼
const els\u{65} = 1;
// `els\u{65}` ç¼ç çæ è¯ç¬¦ä¸ `else` ç¸å
ä¿çå
è¿äºå ³é®åä¸è½å¨ JavaScript æºç ä¸çä»»ä½å°æ¹ç¨ä½åéã彿°ãç±»ççæ è¯ç¬¦ã
æªæ¥ä¿çå ³é®å
å¨ ECMAScript è§æ ¼ä¸ï¼è¿äºå ³é®åè¢«å½æå ³é®åä¿çãç®åå®ä»¬æ²¡æç¹æ®åè½ï¼ä½æ¯å¨æªæ¥æä¸ªæ¶é´å¯è½ä¼å ä¸ãæä»¥è¿äºå ³é®åä¸è½å½ææ è¯ç¬¦ä½¿ç¨ãè¿äºå ³é®åå¨ä¸¥æ ¼æ¨¡å¼åéä¸¥æ ¼æ¨¡å¼ä¸åä¸è½ä½¿ç¨ã
enum
以ä¸å ³é®ååªå¨ä¸¥æ ¼æ¨¡å¼ä¸è¢«å½æä¿çå ³é®åï¼
implementsinterfaceletpackageprivateprotectedpublicstatic
以ä¸å ³é®ååªå¨æ¨¡å代ç ä¸è¢«å½æä¿çå ³é®åï¼
await
ä¹åæ åä¸çä¿çå ³é®å
è¿éæ¯ä¹åçæ¬ä¸ç ECMAScriptï¼1 å° 3ï¼ä¸çä¿çå ³é®åï¼
abstractbooleanbytechardoublefinalfloatgotointlongnativeshortsynchronizedtransientvolatile
å¦å¤ï¼åé¢é nullãtrue å false åæ ·ä¸è½è¢«å½ææ è¯ä½¿ç¨ã
ä¿çåç使ç¨
äºå®ä¸ä¿çåæ¯ä» é对æ è¯ç¬¦ï¼Identifierï¼çææ³å®ä¹èè¨çï¼è䏿¯æ è¯ç¬¦åï¼IdentifierNameï¼çææ³å®ä¹ï¼ãå¦ es5.github.com/#A.1 䏿æè¿°çï¼è¿äºé½æ¯ä¸ææ¥ä¿çåçæ è¯ç¬¦åã
a.import
a["import"]
a = { import: "test" }.
å¦ä¸æ¹é¢ï¼å¦ä¸ç¨æ³æ¯ä¸å 许çãå ä¸ºå®æ¯ä¸ä¸ªæ è¯ç¬¦ï¼èæ è¯ç¬¦çææ³å®ä¹æ¯é¤ä¿çå以å¤çæ è¯ç¬¦åãæ è¯ç¬¦ç¨äºå½æ°å£°æå¼å彿°è¡¨è¾¾å¼ã
function import() {} // Illegal.
åé¢é
>空åé¢é
æ´å¤ä¿¡æ¯å¯ä»¥åè nullã
null
å¸å°åé¢é
æ´å¤ä¿¡æ¯å¯ä»¥åèBoolean
true
false
æ°ååé¢é
åè¿å¶
1234567890
42
请注æï¼åè¿å¶æ°ååé¢éå¯ä»¥ä»¥ 0 å¼å¤´ï¼ä½æ¯å¦æ 0 以åçæé«ä½æ¯ 8 å°ï¼æ°å¼å°ä¼è¢«è®¤ä¸ºæ¯å
«è¿å¶èä¸ä¼æ¥éãæ´å¤ä¿¡æ¯å¯ä»¥åè Firefox bug 957513 å parseInt()ã
äºè¿å¶
äºè¿å¶è¡¨ç¤ºä¸ºå¼å¤´æ¯ 0 忥大åæå°åç Bï¼0bæè
0Bï¼ãè¿æ¯ ECMAScript 6 ä¸çæ°è¯æ³ï¼å¯ä»¥åèä¸é¢çæµè§å¨å
¼å®¹æ§è¡¨æ ¼ã妿0bä¹åæé¤äº 0 æ 1 以å¤çæ°åï¼å°ä¼æåºSyntaxErrorï¼âMissing binary digits after 0bâã
0b10000000000000000000000000000000 // 2147483648
0b01111111100000000000000000000000 // 2139095040
0B00000000011111111111111111111111 // 8388607
å «è¿å¶
å
«è¿å¶è¡¨ç¤ºä¸ºå¼å¤´æ¯ 0 忥大åæå°åç Oï¼0oæ0Oï¼ãè¿æ¯ ECMAScript 6 ä¸çæ°è¯æ³ï¼å¯ä»¥åèä¸é¢çæµè§å¨å
¼å®¹æ§è¡¨æ ¼ã妿æä¸å¨ï¼01234567ï¼ä¸çæ°åï¼å°ä¼æåºSyntaxErrorï¼âMissing octal digits after 0oâã
0O755 // 493
0o644 // 420
åå è¿å¶
åå
è¿å¶è¡¨ç¤ºä¸ºå¼å¤´æ¯ 0 忥大åæå°åç Xï¼0xæ0Xï¼ã妿æä¸å¨ï¼0123456789ABCDEFï¼ä¸çæ°åï¼å°ä¼æåºSyntaxErrorï¼âIdentifier starts immediately after numeric literalâã
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF // 81985529216486900
0XA // 10
æ°å¼åé符
å¯ä»¥ä½¿ç¨ä¸å线ï¼_ï¼U+005Fï¼ä½ä¸ºåé符以å¢å¼ºæ°ååé¢éçå¯è¯»æ§ï¼
1_000_000_000_000
1_050.95
0b1010_0001_1000_0101
0o2_2_5_6
0xA0_B0_C0
1_000_000_000_000_000_000_000n
请注æè¿äºéå¶ï¼
// ä¸å
许è¿ç»åºç°å¤ä¸ªä¸å线
100__000; // SyntaxError
// ä¸å
许使ç¨ä¸å线ä½ä¸ºæ°ååé¢éçç»å°¾
100_; // SyntaxError
// ä¸å
许å¨å导é¶ä¹å使ç¨ä¸å线
0_1; // SyntaxError
对象åé¢é
æ´å¤ä¿¡æ¯å¯ä»¥åè Object å对象åå§åå¨ã
var o = { a: "foo", b: "bar", c: 42 };
// ES6 ä¸çç®ç¥è¡¨ç¤ºæ¹æ³
var a = "foo",
b = "bar",
c = 42;
var o = { a, b, c };
// ä¸éè¦è¿æ ·
var o = { a: a, b: b, c: c };
æ°ç»åé¢é
æ´å¤ä¿¡æ¯å¯ä»¥åè Arrayã
[1954, 1974, 1990, 2014];
å符串åé¢é
'foo'
"bar"
åå è¿å¶è½¬ä¹åºå
"\xA9"; // "©"
Unicode 转ä¹åºå
Unicode 转ä¹åºåè¦æ±å¨\uä¹åè³å°æå个å符ã
"\u00A9"; // "©"
Unicode ç¼ç 转ä¹
ECMAScript 6 æ°å¢ç¹æ§ãä½¿ç¨ Unicode ç¼ç 转ä¹ï¼ä»»ä½å符é½å¯ä»¥è¢«è½¬ä¹ä¸ºåå
è¿å¶ç¼ç ãæé«å¯ä»¥ç¨å°0x10FFFFã使ç¨å纯ç Unicode 转ä¹é常éè¦åæåå¼ç两å以达å°ç¸åçææã
å¯ä»¥åèString.fromCodePoint()åString.prototype.codePointAt()ã
"\u{2F804}";
// 使ç¨å纯 Unicode 转ä¹
"\uD87E\uDC04";
æ£å表达å¼åé¢é
æ´å¤ä¿¡æ¯å¯ä»¥åè RegExpã
/ab+c/g
// ä¸ä¸ªç©ºçæ£å表达å¼åé¢é
// å¿
é¡»æä¸ä¸ªç©ºçéæè·åç»
// 以é¿å
è¢«å½ææ¯è¡æ³¨é符å·
/(?:)/
模æ¿åé¢é
æ´å¤ä¿¡æ¯å¯ä»¥åètemplate stringsã
`string text`
`string text line 1
string text line 2`
`string text ${expression} string text`
tag`string text ${expression} string text`
èªå¨åå·è¡¥å ¨
ä¸äº JavaScript è¯å¥å¿ é¡»ç¨åå·ç»æï¼æä»¥ä¼è¢«èªå¨åå·è¡¥å ¨ (ASI) å½±åï¼
- 空è¯å¥
letãconstãåé声æimportãexportãæ¨¡åå®ä¹- 表达å¼è¯å¥
debuggercontinueãbreakãthrowreturn
ECMAScript è§æ ¼æå°èªå¨åå·è¡¥å ¨çä¸ä¸ªè§åã
-
å½åºç°ä¸ä¸ªä¸å 许çè¡ç»æ¢ç¬¦æâ}âæ¶ï¼ä¼å¨å ¶ä¹åæå ¥ä¸ä¸ªåå·ã
js{ 1 2 } 3 // å°ä¼è¢« ASI 转æ¢ä¸º { 1 2 ;} 3; -
彿è·å°æ è¯ç¬¦è¾å ¥æµçç»å°¾ï¼å¹¶ä¸æ æ³å°å个è¾å ¥æµè½¬æ¢ä¸ºä¸ä¸ªå®æ´çç¨åºæ¶ï¼å°å¨ç»å°¾æå ¥ä¸ä¸ªåå·ã
å¨ä¸é¢è¿æ®µä¸ï¼ç±äºå¨
bå++ä¹é´åºç°äºä¸ä¸ªè¡ç»æ¢ç¬¦ï¼æä»¥++æªè¢«å½æåébçåç½®è¿ç®ç¬¦ãjsa = b ++c // å°è¢« ASI 转æ¢ä¸º a = b; ++c; -
å½è¯å¥ä¸å å«è¯æ³ä¸çéå¶äº§ååè·ä¸ä¸ªè¡ç»æ¢ç¬¦çæ¶åï¼å°ä¼å¨ç»å°¾æå ¥ä¸ä¸ªåå·ã带âè¿é没æè¡ç»æ¢ç¬¦âè§åçè¯å¥æï¼
- åç½®è¿ç®ç¬¦ï¼
++å--ï¼ continuebreakreturnyieldãyield*module
jsreturn a + b // å°è¢« ASI 转æ¢ä¸º return; a + b; - åç½®è¿ç®ç¬¦ï¼