iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
Modern Web

用30天了解javascript系列 第 20

[ 用30天了解javascript]Day20.箭頭函式

  • 分享至 

  • xImage
  •  
  • 箭頭函式是一個簡短的語法,使用"箭頭"(= >)定義函式,提高程式碼可閱讀性。
  • 沒有自己的 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

上一篇
[用30天了解javascript]Day19.this
下一篇
[用30天了解javascript]Day21.原型與繼承
系列文
用30天了解javascript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言