摘要:二類型執行了但是沒有立即返回,而是先執行了中的覆蓋了中的。普通語句執行后,會得到為的,引擎遇到這樣的,會繼續執行下一條語句。控制類語句分成兩部分對其內部造成影響如。
筆記說明
重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有winter的語音】,如有侵權請聯系我,郵箱:kaimo313@foxmail.com。一、引言
本文講一講 JavaScript 語句。二、Completion 類型
// return 執行了但是沒有立即返回,而是先執行了finally function kaimo(){ try{ return 0; } catch(err) { console.log(err) } finally { console.log("a") } } console.log(kaimo()); // a 0
// finally 中的 return 覆蓋了 try 中的 return。 function kaimo(){ try{ return 0; } catch(err) { console.log(err) } finally { return 1; } } console.log(kaimo()); // 12.1、Completion Record
Completion Record 用于描述異常、跳出等語句執行過程。表示一個語句執行完之后的結果,它有三個字段。
[[type]]:表示完成的類型,有 break、continue、return、throw、normal 幾種類型
[[value]]:表示語句的返回值,如果語句沒有,則是 empty
[[target]]:表示語句的目標,通常是一個 JavaScript 標簽
JavaScript 使用 Completion Record 類型,控制語句執行的過程。
三、普通語句在 JavaScript 中,把不帶控制能力的語句稱為普通語句。種類可以參考引言的圖片。
1、這些語句在執行時,從前到后順次執行(這里先忽略 var 和函數聲明的預處理機制),沒有任何分支或者重復執行邏輯。
2、普通語句執行后,會得到 [[type]] 為 normal 的 Completion Record,JavaScript 引擎遇到這樣的 Completion Record,會繼續執行下一條語句。
3、在 Chrome 控制臺輸入一個表達式,可以得到結果,但是在前面加上 var,就變成了 undefined。Chrome 控制臺顯示的正是語句的 Completion Record 的 [[value]]。
四、語句塊語句塊就是拿大括號括起來的一組語句,它是一種語句的復合結構,可以嵌套。
語句塊內部的語句的 Completion Record 的 [[type]] 如果不為 normal,會打斷語句塊后續的語句執行。
1、內部為普通語句的一個語句塊:
// 在每一行的注釋中為 Completion Record { var i = 1; // normal, empty, empty i ++; // normal, 1, empty console.log(i) //normal, undefined, empty } // normal, undefined, empty
在這個block中都是 normal 類型的話,該程序會按順序執行。
2、加入 return
// 在每一行的注釋中為 Completion Record { var i = 1; // normal, empty, empty return i; // return, 1, empty i ++; console.log(i) } // return, 1, empty
在 block 中產生的非 normal 的完成類型可以穿透復雜的語句嵌套結構,產生控制效果。
五、控制型語句控制型語句帶有 if、switch 關鍵字,它們會對不同類型的 Completion Record 產生反應。
控制類語句分成兩部分:
對其內部造成影響:如 if、switch、while/for、try。
對外部造成影響:如 break、continue、return、throw。
穿透就是去上一層的作用域或者控制語句找可以消費break,continue的執行環境,消費就是在這一層就執行了這個break或者continue
這兩類語句的配合,會產生控制代碼執行順序和執行邏輯的效果。
六、帶標簽的語句1、任何 JavaScript 語句是可以加標簽的,在語句前加冒號即可:。
firstStatement: var i = 1;
2、類似于注釋,基本沒有任何用處。唯一有作用的時候是:與完成記錄類型中的 target 相配合,用于跳出多層循環。
outer: while(true) { console.log("outer") inner: while(true) { console.log("inner1") break outer; console.log("inner2") } } console.log("finished") // outer inner1 finished個人總結
越看越發現自己菜雞。。。_(:3」∠)_
看的懂的可以看看這個https://tc39.github.io/ecma262/#sec-runtime-semantics
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109647.html
摘要:二類型執行了但是沒有立即返回,而是先執行了中的覆蓋了中的。普通語句執行后,會得到為的,引擎遇到這樣的,會繼續執行下一條語句。控制類語句分成兩部分對其內部造成影響如。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有wint...
摘要:二類型執行了但是沒有立即返回,而是先執行了中的覆蓋了中的。普通語句執行后,會得到為的,引擎遇到這樣的,會繼續執行下一條語句。控制類語句分成兩部分對其內部造成影響如。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有wint...
摘要:模板語法四種詞法定義二空白符號空白符號分類或稱是,是縮進符,字符串中寫的。注意換行符會影響的兩個重要語法特性自動插入分號和規則。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有winter的語音】,如有侵權請聯系我,郵箱...
閱讀 729·2021-11-24 10:19
閱讀 1106·2021-09-13 10:23
閱讀 3428·2021-09-06 15:15
閱讀 1777·2019-08-30 14:09
閱讀 1683·2019-08-30 11:15
閱讀 1837·2019-08-29 18:44
閱讀 934·2019-08-29 16:34
閱讀 2456·2019-08-29 12:46