es6 -- rest 參數


es6 引入了rest參數(形式:...變量名),用於獲取函數的多余參數,這樣就不需要使用arguments對象了。rest參數搭配的變量是一個數組,該變量將多余的參數放入數組中。

function add(...values) {
    let sum = 0
    forvar val of values) {
        sum += val
    }
    return sum
}

add(2, 3, 4) // 9

上面的代碼的add函數是一個求和函數,利用reat參數,可以向該函數傳入任意數目的參數。

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

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

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

上面代碼的兩種寫法,比較后可以發現,rest參數的寫法更自然也更簡潔。

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)

PS: rest 參數后面不能再有其他參數(即只能是最后一個參數),否則會報錯。

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

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

注:函數的length屬性

指定了默認值以后,函數的length屬性,將返回沒有指定默認值的參數個數。也就是說,指定了默認值后,length屬性將失真。

(function(a){}).length  // 1
(function(a = 5){}).length // 0
(function(a, b, c = 5){}).length // 2

length屬性的返回值,等於函數的參數個數減去指定了默認值的參數個數。比如,上面最后一個函數,定義了3個參數,其中有一個參數c指定了默認值,因此length屬性等於3減去1,最后得到2。這是因為length屬性的含義是,該函數預期傳入的參數個數。某個參數指定默認值以后,預期傳入的參數個數就不包括這個參數了。

 

推薦:http://es6.ruanyifeng.com/#docs/function


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM