首頁 >web前端 >js教程 >JavaScript中arguments函數的詳解(附範例)

JavaScript中arguments函數的詳解(附範例)

不言
不言轉載
2018-10-23 15:43:482423瀏覽
這篇文章帶給大家的內容是關於JavaScript中arguments函數的詳解(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

概述

JavaScript中的函數與其他物件導向語言有幾個不同的地方。

  1. 沒有函數重載

  2. #有一個表示實參清單的類別數組物件arguments

一、函數重載

簡單來說,JAVA 同一個類別中允許幾個函數有相同的函數名稱,但是參數宣告不一樣,這就是函數重載。

但是 JS 不支援函數重載:

function foo(num) {
    console.log(num + 100)
}
function foo(num) {
    console.log(num + 200)
}

foo(100);  // 300

如果 js 中定義了兩個相同名稱的函數,那麼該名字只屬於後面定義的那個函數。

二、arguments 類別陣列

函數 arguments 物件是所有(非箭頭)函數中都可用的局部變數, 是一個類似陣列的物件。你可以使用arguments物件在函數中引用函數的(實際)參數。

function foo() {
    console.log(arguments);
}

foo(1, "foo", false, {name: "bar"}); // [1, "foo", false, object]
function foo() {
    console.log(typeof arguments);
}

foo(1, "foo", false, {name: "bar"}); // object

所以,arguments 是一個具有陣列樣式的對象,有 length 屬性,和下標來索引元素。

JavaScript中arguments函數的詳解(附範例)

三、arguments 的屬性

length

function foo(num1, num2, num3) {
    console.log(arguments)
}

foo(1);  // [1]

length 屬性表示傳入函數的實際參數數量,而不是函數宣告時的形參數量。

callee  
callee 表示函數本身,我們可以在函數中透過 callee 呼叫本身。

四、轉換為真數組

  1. slice

#arguments 物件不支援陣列的其他方法,但可以用Function .call 來間接呼叫。

function sayHi() {
    console.log(Array.prototype.slice.call(arguments, 0))
}
sayHi("hello", "你好", "bonjour")  //["hello", "你好", "bonjour"]
  1. splice

function sayHi() {
    console.log(Array.prototype.splice.call(arguments, 0));
}
sayHi("hello", "你好", "bonjour")  //["hello", "你好", "bonjour"]
  1. Array.from

function sayHi() {
    console.log(Array.from(arguments));
}
sayHi("hello", "你好", "bonjour")  //["hello", "你好", "bonjour"]
  1. 擴充運算子

function sayHi(...arguments) {
    console.log(arguments);
}
sayHi("hello", "你好", "bonjour")  //["hello", "你好", "bonjour"]

五、嚴格模式

嚴格模式和非嚴格模式中,arguments 的表現顯示不相同。

// 严格模式
function foo(a, b) {
    "use strict";
    console.log(a, arguments[0]);
    a = 10;
    console.log(a, arguments[0]);
    arguments[0] = 20;
    console.log(a, arguments[0]);
    b = 30;
    console.log(b, arguments[1])
}
foo(1);
输出:
1 1
10 1
10 20
30 undefined

// 非严格模式
function foo(a, b) {
    console.log(a, arguments[0]);
    a = 10;
    console.log(a, arguments[0]);
    arguments[0] = 20;
    console.log(a, arguments[0]);
    b = 30;
    console.log(b, arguments[1]);
}
foo(1);
输出:
1 1
10 10
20 20
30 undefined

在非嚴格模式中,傳入的參數,實參和 arguments 的值會共享,當沒有傳入時,實參與 arguments 值不會共享。

而在嚴格模式中,實參和 arguments 的值不會共用。


以上是JavaScript中arguments函數的詳解(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除