|
|
|
|
|
|
常規函數也好,箭頭函數也好,你什么時候會選擇一個而不是另一個?這就需要了解它們之間的一些區別了,在這篇文章中,我將介紹箭頭函數與常規函數區別之:參數對象,以便你可以根據需要選擇正確的語法。
常規函數
在常規函數的主體內部,arguments是一個特殊的類數組對象,其中包含調用該函數的參數列表。
讓我們用 2 個參數調用myFunction()函數:
function myFunction() {
console.log(arguments);
}
myFunction('a', 'b'); // logs { 0: 'a', 1: 'b', length: 2 }輸出

在myFunction()函數體內部arguments是一個類似數組的對象,其中包含調用參數:'a'和'b'。
箭頭函數
對于箭頭函數,arguments在箭頭函數內部沒有定義特殊關鍵字。
與箭頭函數的this值相同,arguments對象是通過詞法解析的:箭頭函數從外部函數訪問arguments。
讓我們在箭頭函數內部嘗試訪問arguments:
function myRegularFunction() {
const myArrowFunction = () => {
console.log(arguments);
}
myArrowFunction('c', 'd');
}
myRegularFunction('a', 'b'); // logs { 0: 'a', 1: 'b', length: 2 }輸出

可以看到,調用帶有參數c和d的箭頭函數myArrowFunction()時,在它的函數體內,arguments對象仍然等于myRegularFunction()函數調用的參數:a和b。
如果你想訪問箭頭函數的直接參數,則可以使用其余參數功能:
function myRegularFunction() {
const myArrowFunction = (...args) => {
console.log(args);
}
myArrowFunction('c', 'd');
}
myRegularFunction('a', 'b'); // logs ['c', 'd']輸出

...args 其余參數收集箭頭函數的執行參數:['c', 'd']。
總結
本文通過幾個示例,介紹了箭頭函數與常規函數的區別之:arguments(參數對象),通過本文的學習,我們應該了解到,箭頭函數是從外部函數訪問arguments的,而arguments是常規函數的對象。
相關文章
