# 四之 6、 JS 102 ES6 更新:箭頭函式 arrow Function ###### tags: `JS102` `JavaScript續` `2020八月第二週` `進度筆記` `Lidemy心得` 8/4 [箭頭函式](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Functions/Arrow_functions) 可以省略 function 的做法,可以提高閱讀性。 --- 與一般函式相比: ``` function test(n) { return n } const test = (n) => { return n } ``` 只有一個參數連 ( ) 都能省略: ``` const test = n => { return n } ``` ## 好處在哪 ? ``` var arr = [1, 2, 3, 4, 5] console.log( arr .filter(function(value) { return value > 1 }) .map(function(value) { return value * 2 }) ) ``` 會印出 [ 4, 6, 8, 10 ] , 過濾掉 1 , 然後將每個值 * 2 。 但有了箭頭函式會省很多工: ``` var arr = [1, 2, 3, 4, 5] console.log( arr .filter(value => { return value > 1 }) .map(value => { return value * 2 }) ) ``` 印出 [ 4, 6, 8, 10 ] 還可以更省略: ``` var arr = [1, 2, 3, 4, 5] console.log( arr .filter(value => value > 1) .map(value => value * 2) ) ``` 印出 [ 4, 6, 8, 10 ] 。 可讀性變得更高,連區塊都省略。 被稱作語法糖,包裝了很多東西,如果要函式做很多事情: ``` .filter(value => { ... . . . return value > 1 }) ``` 就可能這樣做比較好,才不會太過精簡。 跟 `this` 也有關。 --- 參考資料: [鐵人賽:箭頭函式 (Arrow functions) ](https://wcc723.github.io/javascript/2017/12/21/javascript-es6-arrow-function/) [[筆記] JavaScript ES6 中的箭頭函數(arrow function)及對 this 的影響](https://pjchender.blogspot.com/2017/01/es6-arrow-function.html) [箭頭函式](https://eyesofkids.gitbooks.io/javascript-start-from-es6/content/part4/arrow_function.html) --- # 四之 7、 JS 102 ES6 Babel 新舊相容 ###### tags: `JS102` `JavaScript續` `2020八月第二週` `進度筆記` `Lidemy心得` 8/7 Babel 的安裝說明:https://babeljs.io/docs/en/next/babel-node.html 是重要的開發工具,如果想要用某物,但其支援度很少,開發工具將現在新的語法轉乘舊式語法,或是可以支援舊的瀏覽器,前端發展速度很快。 --- ## 用法: `npx babel-node` `npx babel-node` 的用法: 可以執行更新的指令,用在生產上會造成記憶體大量負擔,通常會用在開發。 先在有 npm 或是 yarn 的基礎下安裝,安裝的資料夾中要含有 node_modules 資料夾,以及 package.json 檔案; 官方網站以 npm 安裝為基準,因此先以 npm 指令安裝 `npm install --save-dev @babel/core @babel/node @babel/preset-env` 。 有 @babel/preset-env 才能執行新的含 ES6 或以上語法,把多新的語法換成多舊的語法。 好了後新增一個空白檔案 .babelrc 檔案,內容為: ``` { "presets": ["@babel/preset-env"] } ``` 填入內容後,是在告訴 babel 要用這個 preset , 沒有這個檔案也會跑不了 。 最後使用 `npx babel-node index.js` 指令下去跑即可 (記得也要有模組檔案,以下範例都是以 utils.js 檔案為例)。 --- # 四之 8、 JS 102 ES6 更新:導入和導出,進出口貿易會有順差 ###### tags: `JS102` `JavaScript續` `2020八月第二週` `進度筆記` `Lidemy心得` 8/5 ES6 導入和導出 (import and export) ES6 Export 有幾種方式: export function add(){},使用 import {add} 引入 export { add },與上面那種一樣 export default function add(),使用 import add 引入,不需要加大括號 如果想要用其他名字,可以用 as 取別名,例如說 export { add as addFunction } 可以用 import * as utils from 'utils' 把全部都 import 進來。 --- 最基本的 export 在欲導出的檔案 (以 utils.js 檔案為例) , function 前面加 utils : ``` export function add(a, b) { return a + b } export const PI = 3.1415 ``` 然後在 index.js 檔案這樣寫: ``` /* var add = require('./utils') console.log(add(3, 5)) */ import {add, PI} from './utils' console.log(add(3, 5)) ``` 會發現加入 import 更動了,且不用宣告。 但這樣印不出來,需要用 Babel `npx babel-node import.js` 指令來跑的話會印出 8 。 --- ## export {} 變形 ``` export function add(a, b) { return a + b } const PI = 3.1415 export { add as addFunction, PI } ``` 會印出 8 3.1415 , export { } 不是物件,要印出別的名稱; utils.js 檔案必須改成: ``` export function add(a, b) { return a + b } const PI = 3.1415 export { add as addFunction, PI } ``` index.js 檔案內則是: ``` import {addFunction, PI} from './utils' console.log(addFunction(3, 5), PI) ``` --- ## import * as 可以把所有東西導入進來: utils.js 修改成: ``` export function add(a, b) { return a + b } const PI = 3.1415 export { add as addFunction, PI } ``` 在 index.js 檔案內則是: ``` import * as utils from'./utils' console.log(utils.addFunction(3, 5), utils.PI) ``` 會印出 8 3.1415。 ``*`` 在程式語言代表所有東西。 東西多的時候可以用 `import * as utils from'./utils'` 。 --- ## export default 可以在 export 時使用預設值,例如在 utils.js 檔案內: utils.js 檔案必須改成: ``` export default function add(a, b) { return a + b } export const PI = 3.1415 ``` 一旦在模組 utils.js 檔案內加入 default 後,可以在 index.js 檔案內修改: ``` import add from'./utils' console.log(add(3, 5)) ``` 會印出 8 ; 跟在用 require 有點像,差別在不用加入 { }。 如果要用到 PI : ``` import add, {PI} from'./utils' console.log(add(3, 5), PI) ``` 會印出 8 3.1415 。 default 也能 as : ``` import {default as add, PI} from'./utils' console.log(add(3, 5), PI) ``` 一樣會印出 8 3.1415 。 新專案蠻常用 ES6 的導入導出。 --- # 四之 8、 JS 102 ES6 學習仍在持續 ###### tags: `JS102` `JavaScript續` `2020八月第二週` `進度筆記` `Lidemy心得` 8/8 ES6 之後還要學習 Map, Set< Symbol , 有必要用的時候才會用到新語法,宣告變數會比較常用,之後會比較少用到 var 。 [更多 ES6 學習使用參考](https://github.com/DrkSephy/es6-cheatsheet) 模組化的 ES6 語法還蠻常用,所以把 function 放到另外一個檔案(模組),出事的時候可以修一個模組就好 , npm 在專案也很重要,在 framework 或 library 就會需要引入,jest 測試也蠻適合訓練,實際開發時單元測試也很常見,之後會學到 JS 在瀏覽器的應用。 ---