1. 程式人生 > 實用技巧 >ES6函式擴充套件-rest引數

ES6函式擴充套件-rest引數

文章參考:https://es6.ruanyifeng.com/#docs/function#rest-引數

rest引數

ES6 引入 rest 引數(形式為...變數名),用於獲取函式的多餘引數,這樣就不需要使用arguments物件了。rest 引數搭配的變數是一個數組,該變數將多餘的引數放入陣列中。

利用 rest 引數,可以向該函式傳入任意數目的引數:求和示例

function add(...values) {
  let sum = 0;

  for (var val of values) {
    sum += val;
  }

  return sum;
}
// 將所有的引數放入陣列中,傳遞給函式
add(2, 5, 3) // 輸出10

下面是一個rest 引數代替arguments變數的例子。

// arguments變數的寫法
function sortNumbers() {
  return Array.prototype.slice.call(arguments).sort();
}

// rest引數的寫法
const sortNumbers = (...numbers) => numbers.sort();

arguments物件不是陣列,而是一個類似陣列的物件。所以為了使用陣列的方法,必須使用Array.prototype.slice.call先將其轉為陣列。

rest 引數就不存在這個問題,它就是一個真正的陣列,陣列特有的方法都可以使用。

下面是一個利用 rest 引數改寫陣列push方法的例子。

function push(array, ...items) {
  items.forEach(function(item) {
    array.push(item);
    console.log(item);
  });
}

var a = [];
push(a, 1, 2, 3)

注意,rest 引數之後不能再有其他引數(即只能是最後一個引數),否則會 報錯

// 報錯
function f(a, ...b, c) {
  // ...
}

函式的length屬性,不包括 rest 引數。

(function(a) {}).length  // 1
(function(...a) {}).length  // 0
(function(a, ...b) {}).length  // 1

------------恢復內容結束------------