3. 流程語法與函式

Justin Lin
Justin LinTechnology / Community Evangelist at Free lancer
3. 流程語法與函式
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
1 of 76

Recommended

Worktest测试框架原理 by
Worktest测试框架原理Worktest测试框架原理
Worktest测试框架原理Janeay
226 views13 slides
jasmine入门指南 by
jasmine入门指南jasmine入门指南
jasmine入门指南Zhicheng Wang
1.1K views11 slides
雲端運算20150521 by
雲端運算20150521雲端運算20150521
雲端運算20150521勝億 曾
881 views13 slides
最新Java技术内存模型 by
最新Java技术内存模型最新Java技术内存模型
最新Java技术内存模型yiditushe
580 views39 slides
网站前端代码静态检查工具研究 by
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究pop2008
1.3K views16 slides
移动开发的性能优化 by
移动开发的性能优化移动开发的性能优化
移动开发的性能优化foxgem
1.4K views21 slides

More Related Content

Similar to 3. 流程語法與函式

面向对象设计七大原则 by
面向对象设计七大原则面向对象设计七大原则
面向对象设计七大原则zoorz
1.5K views44 slides
网站前端代码静态检查工具综述 by
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述pop2008
1.1K views14 slides
Notes of jcip by
Notes of jcipNotes of jcip
Notes of jcipDai Jun
2K views134 slides
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型 by
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Justin Lin
2.5K views78 slides
Java常见问题排查 by
Java常见问题排查Java常见问题排查
Java常见问题排查bluedavy lin
11.5K views46 slides
Java常见问题排查 by
Java常见问题排查Java常见问题排查
Java常见问题排查ayanamist
2K views46 slides

Similar to 3. 流程語法與函式(12)

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

More from Justin Lin

Ch14 簡介 Spring Boot by
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
872 views22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
280 views58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
274 views31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
157 views8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
153 views30 slides
Ch09 整合資料庫 by
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
233 views92 slides

More from Justin Lin(20)

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

Recently uploaded

AI Technology & Development of Civilization by
AI Technology & Development of CivilizationAI Technology & Development of Civilization
AI Technology & Development of Civilizationunclebrown017
44 views74 slides
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
40 views37 slides
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
43 views32 slides
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
43 views25 slides
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
151 views54 slides
Hacking Facebook for fun and profit by Pranav Hivarekar by
Hacking Facebook for fun and profit by Pranav HivarekarHacking Facebook for fun and profit by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav HivarekarPranav Hivarekar
6 views69 slides

Recently uploaded(6)

AI Technology & Development of Civilization by unclebrown017
AI Technology & Development of CivilizationAI Technology & Development of Civilization
AI Technology & Development of Civilization
unclebrown01744 views
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by Shengyou Fan
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan151 views
Hacking Facebook for fun and profit by Pranav Hivarekar by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav HivarekarHacking Facebook for fun and profit by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav Hivarekar

3. 流程語法與函式