輕鬆學習 JavaScript——第 2 部分:函數中的 Rest 參數

來源:互聯網
上載者:User

標籤:asc   src   idt   屬性   破壞   一起   ons   變數   可變   

JavaScript函數可以使用任意數量的參數。與其他語言(如C#和Java)不同,你可以在調用JavaScript函數時傳遞任意數量的參數。JavaScript函數允許未知數量的函數參數。在ECMAScript 6之前,JavaScript有一個變數來訪問這些未知或可變數目的參數,這是一個類似數組的對象,並非一個數組。細想以下代碼來理解arguments變數:

function add(){    var result = 0;     for(let i=0;i<arguments.length;i++){        result = result + arguments[i];    }    return result; }var r = add(6,9,3,2);console.log(r);var t = add(7,56,9);console.log(t);

如你所見,arguments對象用於訪問未知或可變的函數參數。即使arguments使用length屬性和方括弧,它也不是一個真正的JavaScript數組。你不能對arguments對象使用其他JavaScript數組方法,如pop,push,slice等。在使用arguments時存在的一些問題是:

  • JavaScript函數arguments對象不是一個真正的JavaScript數組;因此,你不能使用其他數組方法,如pop,push,slice等。
  • 在內建函式中訪問外部函數的arguments對象是很困難的。要訪問的話,你需要在變數中分配外部函數的arguments函數,然後在內建函式中使用它。
  • 如果你想要使用arguments對象作為數組,那麼你需要通過Aarry.prototype.slice手動轉換。

ECMAScript 6引入了一個新功能,Rest參數,它表示一個未知數量的參數作為函數中的一個數組。它不僅將額外的參數表示為數組,還解決了arguments對象的許多問題。使用rest參數重寫上面的add函數。

function add(...theArgs){    var result = 0;     for(let i=0;i<theArgs.length;i++){        result = result + theArgs[i];    }    return result; }var r = add(6,9,3,2);console.log(r);var t = add(7,56,9);console.log(t);

你可以將rest參數定義為…theArgs或… args。如果最後命名的函數參數以…(三個點)作為首碼,那麼它將成為函數的rest參數。JavaScript函數的rest參數是純JavaScript數組。在上面的代碼中,…theArgs是函數add的rest參數,因為它是唯一的具名引數,且也以…(三個點)作為首碼。由於rest參數是JavaScript數組,所以你可以對rest參數theArgs執行諸如push,pop等操作,如下面的代碼所示:

function add(...theArgs){    theArgs.push(10);    var result = 0;     for(let i=0;i<theArgs.length;i++){        result = result + theArgs[i];    }    var lastItem  = theArgs.pop();    console.log(lastItem);    return result; }

JavaScript函數的rest參數也可以與其他參數一起工作。如果你不想在rest參數數組中包含特定參數的話,那麼你可能需要在函數中使用其他具名引數。細想以下代碼塊:

function add(num1, num2, ...theArgs){    console.log(num1);    console.log(num2);    console.log(theArgs.length);}var r = add(6,9,3,2);var t = add(7,56,9);

對於第一次函數調用,6和9將分別分配給num1和num2。對於第二個函數調用,7和56將被分配給num1和num2。啟動第三個參數的參數將被分配給rest參數數組。請記住,前兩個參數不會成為rest參數數組的一部分。所以,如果你打算將所有的值都包含在rest參數中,那麼你應該一開始就將它們定義為用逗號分隔的具名引數。下面給出的代碼將會導致錯誤:

function add(num1, ...theArgs,num2){    console.log(num1);    console.log(num2);    console.log(theArgs.length);}

在上面的代碼中,rest參數不是最後一個參數,所以JavaScript會拋出錯誤。rest參數必須是最後一個正式參數。

 image

JavaScript允許你破壞rest參數,這意味著你可以將rest變數資料解包為不同的變數名稱。請看下面的代碼:

function add(...[a,b,c]){    return a+b+c; }var r = add(6);console.log(r);var t = add(7,56,9);console.log(t);

第一次函數調用,將分配a = 6,b = undefined,c = undefined,第二次函數調用,將分配a = 7,b = 56,c = 9。在此例子中,函數將忽略傳遞的任何額外的參數。

JavaScript函數的rest參數是對arguments對象使用函數未知參數的一個巨大改進。它是一個純JavaScript數組;因此,你可以對它使用所有數組方法。你可以將rest變數資料解包到命名變數中。你可以給rest參數指定任何名稱,這又是一個使用arguments關鍵字的重大改進。

歡迎加入學習交流群569772982,大家一起學習交流。

輕鬆學習 JavaScript——第 2 部分:函數中的 Rest 參數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.