箭頭函式是 JavaScript ES6(ECMAScript 2015)引入的一種簡化 Function Expression 語法。
它用來快速定義匿名函式,語法簡潔,特性明確,特別適合用於回呼函式等場景。
const 函式名稱 = (參數1, 參數2, ...) => {
// 函式內容
return 結果;
};
const add = (a, b) => a + b;
const square = x => x * x;
const greet = () => 'Hello, world!';
const obj = {
name: 'Amy',
// 傳統函式
regularFunction: function () {
console.log(this.name); // this 指向 obj
},
// 箭頭函式
arrowFunction: () => {
console.log(this.name); // this 指向外部作用域,可能是全域物件(undefined)
},
greet: function() {
console.log('Hello, my name is ' + this.name);
// 傳統函式
function innerFunction() {
console.log('Inside innerFunction, this.name is:', this.name);
}
innerFunction();
// 箭頭函式
const innerArrowFunction = () => {
console.log('Inside arrowFunction, this.name is:', this.name);
};
innerArrowFunction();
}
};
obj.regularFunction(); //輸出:Amy
obj.arrowFunction(); // 輸出:undefined
obj.greet();
// 輸出:"Hello, my name is Amy"
// "Inside innerFunction, this.name is:" "undefined"
// "Inside arrowFunction, this.name is:" "Amy"
箭頭函式無法使用 arguments,需要用展開運算符 ...args 替代。
const regularFunction = function () {
console.log(arguments); // 可使用 arguments
};
const arrowFunction = (...args) => {
console.log(args); // 使用展開運算符代替 arguments
};
regularFunction(1, 2, 3); // 輸出:[1, 2, 3]
arrowFunction(1, 2, 3); // 輸出:[1, 2, 3]
箭頭函式無法使用 new 關鍵字。
const Arrow = () => {};
new Arrow(); // TypeError: Arrow is not a constructor
setTimeout(() => {
console.log('This is a callback function!');
}, 1000);
const numbers = [1, 2, 3, 4];
const squares = numbers.map(n => n * n);
console.log(squares); // [1, 4, 9, 16]
class Timer {
constructor() {
this.seconds = 0;
}
start() {
setInterval(() => {
this.seconds++;
console.log(this.seconds); // this 永遠指向 Timer 實例
}, 1000);
}
}
const timer = new Timer();
timer.start();
箭頭函式適合用於簡化回呼邏輯與處理固定 this
的場景,但不適合需要更多動態特性的函式場景。