- 箭頭函式是一個簡短的語法,使用"箭頭"(= >)定義函式,提高程式碼可閱讀性。
- 沒有自己的 this,this會向上層繼承,如果沒有會找到全域window
箭頭函式寫法
// 有多行函式內容,要用大括號 {} 包住
(param1, param2, …, paramN) => { statements }
// 如果只有一行 expression,可以省略大括號 {}
// expression 的值,會被當作是函式回傳值
(param1, param2, …, paramN) => expression
(param1, param2, …, paramN) => { return expression; }
var sum = (a,b) =>{
return a+b;
}
console.log(sum(10,5)); //15
//一般函式寫法
var sum = function(a,b){
return a+b;
}
console.log(sum(10,5)); //15
//常見錯誤
//需要注意的是,無{},會自動有return作用,只能在單一行的表達式使用
var sum = (a,b) => a+b;
console.log(sum(10,5)); //15
//在多行表達式不會自動加reutrn,因此會得到undefined
var sum2 = (a,b) =>{ a+b; }
console.log(sum2(10,5)); //undefined
//只有一個引數的
(singleParam) => { statements }
singleParam => { statements } //可以省略()
var userInfo = (name) => name;
console.log(userInfo('Jay')); //Jay
var userInfo = name => name; //可以省略()
console.log(userInfo('Jay')); //Jay
//一般函式寫法
var userInfo = function(name){
return name;
};
console.log(userInfo('Jay'));
// 如果沒有參數,必須留著空的(),不能省略
() => { statements }
() => expression
var userInfo = () => 'Jay';
console.log(userInfo()); //Jay
不可使用箭頭函式情況
不存在arguments 物件
//一般函式
const sum = function(v1, v2){
//arguments是類陣列,會將傳入參數都印出來
console.log(arguments); // 10, 20, 30, 40, 50
}
sum(10, 20, 30, 40, 50);
//箭頭函式
const sum = () => {
//箭頭函式沒有argument,因此會報錯
console.log(arguments); //arguments is not defined
}
sum(10, 20, 30, 40, 50);
//可用其餘參數解決
//其餘參數:表示不確定數量的參數,並將其視為一個陣列
const sum = (...arg) => {
console.log(arg
}
sum(10, 20, 30, 40, 50);
不可以當作建構函式及原型
//一般函式
//具有prototype,可用於建構函式
const userInfo = function(nameVal){
this.name = nameVal;
}
console.log(userInfo.prototype);
const newUserInfo = new userInfo('Jay');
console.log(newUserInfo); //Jay
//箭頭函式
//不具有prototype,不可用於建構函式
//new 呼叫箭頭函式會報錯,因為箭頭函式沒有 constructor
const userInfoArr = (nameVal) =>{
this.name = nameVal;
}
console.log(userInfoArr.prototype); // undefined
const newUserInfoArr = new userInfoArr('Jay');
console.log(newUserInfo); //is not a constructor
使用判斷式時,後面不能直接接使用箭頭
//一般函式
let sum = 0;
const sumFn = sum || function(){return 100};
console.log(sumFn()); //100
//箭頭函式
let sum = 0;
const sumFn = sum || () => 100;
console.log(sumFn()); //Malformed arrow function parameter list
//要使用時,在後面加上()
let sum = 0;
const sumFn = sum || (() => 100);
console.log(sumFn()); //100