SlideShare ist ein Scribd-Unternehmen logo
1 von 76
3.流程語法與函式
• 學習目標
– 使用除錯器
– 認識基本流程語法
– 運用一級函式特性
– 使用yield建立產生器
– 認識模版字串與標記模版
2
使用Visual Studio Code
3
4
5
6
7
8
if分支判斷
9
10
11
變數與區塊
• 若在某個區塊中使用let或const宣告變數,
可視範圍限於區塊之中
• 在JavaScript中,還可以直接定義區塊
12
• 使用var宣告的變數,沒有區塊範圍的限制
• 這個特性在其他程式語言中並不常見,這
也是ES6以後不推薦使用var宣告變數的原
因之一
13
• let宣告的範圍限於區塊
• let宣告的變數存在著暫時死區
14
switch比對
• switch的case採用的是===嚴格比對
15
16
• 千萬不要在case比對中使用NaN
17
for迴圈
18
• 若是從頭至尾循序走訪陣列或字串,ES6新
增了for..of語法可以使用
19
• 對於U+0000至U+FFFF範圍外的字元,
for..of語法可以正確地取得「字元」而
不是碼元
20
• 想要列舉物件的特性名稱,可以使用
for..in語法
21
• 陣列也是一種物件,而索引不過是基於數
字的特性名稱
22
• for..in針對的是實例本身以及繼承而來
的可列舉特性
• 規範中並不包含列舉時特性的順序排列
23
• 想確認物件是否擁有某特性,可以使用in
運算子檢驗
• 只要實例本身擁有或是繼承而來的特性,
in運算子就會傳回true
24
• 想知道物件「本身」是否擁有某特性(而
不是繼承而來的特性),可以使用
hasOwnProperty()方法
25
while迴圈
26
break、continue
27
28
• 配合標籤使用
29
30
宣告函式
31
• JavaScript會自動用換行來作為陳述句結束
的依據
• 不過這是JavaScript中不好的特性
32
• {}的風格問題
33
• 遞迴(Recursion)
34
• 區域函式(Local function)
35
• 不直接支援函式重載
• 指定的引數個數少於參數個數,未被指定引
數的參數會被設為undefined
36
• ES6以後可以使用預設引數
• ES6新支援物件實字寫法
37
• 參數的預設值,每次都會重新運算
38
• ES6之前的版本會使用Falsy family結合||捷
徑運算
39
• ES6可以在函式的參數名稱前加上「…」,
表示該參數接受不定長度引數
40
• 在ES6之前,若想實作出不定長度引數的效
果,必須借助arguments
• 是類陣列實例,存放著呼叫函式時的「全
部」引數,索引順序就是引數的指定順序
41
選項物件
42
一級函式的運用
• 每個函式都是個物件,是Function的實例
• 對函式物件使用typeof,會傳回
'function'
43
• 函式跟基本型態、物件、陣列等一樣,都
被JavaScript視為一級公民來對待
• 可以自由地在變數、函式呼叫時指定,因
此具有這樣特性的函式,也被稱一級函式
(First-class function)
• 將某個可重用流程進行傳遞
44
filter()函式
45
46
47
map()函式
48
49
陣列filter()、map()
50
陣列sort()
51
• 函式是Function的實例,也因此具有一些
特性與方法
• name在ES6以前已經被廣泛實作,只不過
在ES6中才標準化
52
函式實字
53
• 函式宣告與函式實字不同的地方
54
• 函式實字是可以附加名稱的
• 立即呼叫運算式(Immediately Invoked
Functions Expression, IIFE)
55
匿名函式
56
箭號函式
57
Closure
• 函式與作用域環境(Lexical environment)
的組合
• 自由變數(Free variable)
58
• 函式會捕捉的是變數,不是變數值
59
• 想要捕捉每次的i變數值,而不是變數本身
60
• 使用ES6的let
61
產生器函式
• 函式並不會因為yield而結束,只是將流
程控制權讓給函式的呼叫者
62
• 產生器函式會傳回產生器物件,此物件具
有next()方法
63
生產者與消費者
64
65
• 具有yield的函式,還是可以使用return
66
67
• 資料來源是直接從另一個產生器取得
68
• 使用yield*改寫
69
模版字串
70
71
72
標記模版
• 特殊形式的函式呼叫
• 底下的程式碼執行效果,相當於f('10 +
20 = 30')
73
• f`${a} + ${b} = ${a + b}`
– 等同於呼叫f(['', ' + ', ' = ', ''],
10, 20, 30)
74
• String.raw函式是其中一個例子
75
76

Weitere ähnliche Inhalte

Ähnlich wie 3. 流程語法與函式

面向对象设计七大原则
面向对象设计七大原则面向对象设计七大原则
面向对象设计七大原则zoorz
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述pop2008
 
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcipDai Jun
 
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Justin Lin
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查bluedavy lin
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查ayanamist
 
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註Justin Lin
 
自訂泛型、列舉與標註
自訂泛型、列舉與標註自訂泛型、列舉與標註
自訂泛型、列舉與標註Justin Lin
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Justin Lin
 
Ecmascript
EcmascriptEcmascript
Ecmascriptjay li
 
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性Xuefeng Zhang
 
超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B TestingYing-Hsiang Liao
 

Ähnlich wie 3. 流程語法與函式 (12)

面向对象设计七大原则
面向对象设计七大原则面向对象设计七大原则
面向对象设计七大原则
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
 
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcip
 
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
 
自訂泛型、列舉與標註
自訂泛型、列舉與標註自訂泛型、列舉與標註
自訂泛型、列舉與標註
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
 
超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing超理性使用者介面設計 - Data-driven A/B Testing
超理性使用者介面設計 - Data-driven A/B Testing
 

Mehr von Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 

Mehr von Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 

3. 流程語法與函式