ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptのarguments関数を詳しく解説(例付き)

JavaScriptのarguments関数を詳しく解説(例付き)

不言
不言転載
2018-10-23 15:43:482423ブラウズ
この記事では、JavaScript の argument 関数について詳しく説明します (例を示します)。必要な方は参考にしていただければ幸いです。

概要

JavaScript の関数は、いくつかの点で他のオブジェクト指向言語とは異なります。

  1. #関数のオーバーロードはありません

  2. #配列のようなオブジェクト引数があります
  3. ##実際のパラメータのリスト

    #1. 関数のオーバーロード
簡単に言えば、JAVA では、同じクラス内の複数の関数が同じ関数名を持つことができますが、これが関数のオーバーロードです。

ただし、JS は関数のオーバーロードをサポートしていません:

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

foo(100);  // 300
同じ名前の 2 つの関数が js で定義されている場合、その名前は後で定義された関数にのみ属します。

2. 引数クラスの配列

関数の引数オブ​​ジェクトは、すべての (アロー以外の) 関数で使用できるローカル変数であり、配列のようなオブジェクトです。引数オブジェクトを使用すると、関数内で関数の (実際の) パラメーターを参照できます。

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

つまり、引数は長さプロパティとインデックス要素の添字を持つ配列スタイルのオブジェクトです。

#3. 引数の属性JavaScriptのarguments関数を詳しく解説(例付き)

length

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

foo(1);  // [1]

length 属性は渡すことを示します。関数が宣言されたときの仮パラメータの数ではなく、関数の実際のパラメータの数を入力します。

callee

callee は関数自体を表し、関数内の callee を通じてそれ自体を呼び出すことができます。

4. 真の配列への変換

slice

  1. ##arguments オブジェクトは他の配列メソッドをサポートしていませんが、次のことはできます。 Function .call を使用して間接的に呼び出します。

    function sayHi() {
        console.log(Array.prototype.slice.call(arguments, 0))
    }
    sayHi("hello", "你好", "bonjour")  //["hello", "你好", "bonjour"]
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"]
  1. 5. 厳密モード

    厳密モー​​ドと非厳密モードでは、引数のパフォーマンスが異なります。
  2. // 严格模式
    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
非厳密モードでは、渡されたパラメータの値、実パラメータおよび引数は共有されます。何も渡されない場合、実パラメータおよび引数の値は共有されません。

厳密モー​​ドでは、実際のパラメータと引数の値は共有されません。

以上がJavaScriptのarguments関数を詳しく解説(例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。