Javascript学習ノート - 関数(4):引数オブジェクト_基礎知識
すべての Javascript 関数は、独自のスコープ内の特別な変数 (引数) にアクセスできます。この変数には、関数に渡されるすべての引数のリストが含まれています。
引数オブジェクトは配列ではありません。構文的には配列と同じ機能を持ちますが、たとえば長さのプロパティがあります。しかし、これは Array.prototype を継承するものではなく、実際にはオブジェクトです。
したがって、プッシュ、ポップ、スライスなどの一部の配列メソッドを引数に直接使用することはできません。 したがって、これらのメソッドを使用するには、それを実数の配列に変換する必要があります。
配列に変換
次のコードは、引数オブジェクトのすべての要素を含む配列を返します。
Array.prototype.slice.call(arguments);
変換は非常に遅いため、パフォーマンスが重要なプログラムではお勧めできません。
パラメータを渡す
次は、ある関数から別の関数に引数オブジェクトを渡すための推奨される方法です。
関数 foo() {
bar.apply(null, 引数);
}
関数 bar(a, b, c) {
// ここで処理を行います
}
もう 1 つの賢い方法は、call と apply を同時に使用して、バインドされていない外部メソッドをすばやく作成することです。
関数 Foo() {}
Foo.prototype.method = function(a, b, c) {
console.log(this, a, b, c);
};
// 「メソッド」のバインドされていないバージョンを作成します
// パラメーターを受け取ります: this、arg1、arg2...argN
Foo.method = function() {
// 結果: Foo.prototype.method.call(this, arg1, arg2... argN)
Function.call.apply(Foo.prototype.method, 引数);
};
関数のパラメータと引数の属性の関係
arguments オブジェクトは、独自のプロパティとその関数の仮パラメータの両方に対して getter メソッドと setter メソッドを作成します。
したがって、関数の仮パラメータを変更すると、対応する引数オブジェクトのプロパティ値に影響し、その逆も同様です。
関数 foo(a, b, c) {
引数[0] = 2;
; // 2
b = 4;
引数[1] // 4
; var d = c;
d = 9;
c; // 3
}
foo(1, 2, 3);
パフォーマンスの問題
引数が作成されないのは 2 つの状況のみです。1 つは関数内のローカル変数として宣言され、もう 1 つは関数の仮パラメーターとして使用されます。それ以外の場合は、引数オブジェクトが常に作成されます。
getter メソッドと setter メソッドは常に引数オブジェクトを使用して作成されるため、引数の使用自体はパフォーマンスにほとんど影響を与えません。
ただし、JavaScript のパフォーマンスに重大な影響を与える状況が 1 つあります。それは、arguments.callee の使用です。
関数 foo() {
argument.callee; // この関数オブジェクトを使って何かを行います
argument.callee.caller; // および呼び出し元の関数オブジェクト
}
関数 bigLoop() {
for(var i = 0; i foo(); // 通常はインライン化されます...
}
}
上記のコードでは、foo 関数はそれ自体とその呼び出し元の両方を認識する必要があるため、単純なインライン拡張機能ではなくなりました。これは、インライン展開によってもたらされるパフォーマンスの向上を無効にするだけでなく、関数自体が特定の呼び出しコンテキストに依存する必要がある可能性があるため、関数のカプセル化も破壊します。
したがって、arguments.callee は使用しないことをお勧めします。
上記はすべて Javascript の引数オブジェクトについての説明です。簡単に言えば、
引数は関数のパラメータ オブジェクトを指します (渡される実際のパラメータを指します)
argument.length は、関数
のパラメーター オブジェクトの長さを指します。
argument[i] は、i 番目のパラメータの値を指します (最初のパラメータは 0)

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

MySQL クエリ結果の配列をオブジェクトに変換する方法は次のとおりです。 空のオブジェクト配列を作成します。結果の配列をループし、行ごとに新しいオブジェクトを作成します。 foreach ループを使用して、各行のキーと値のペアを新しいオブジェクトの対応するプロパティに割り当てます。新しいオブジェクトをオブジェクト配列に追加します。データベース接続を閉じます。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

PHP では、配列は順序付けられたシーケンスであり、要素はインデックスによってアクセスされます。オブジェクトは、new キーワードによって作成されたプロパティとメソッドを持つエンティティです。配列へのアクセスはインデックス経由で、オブジェクトへのアクセスはプロパティ/メソッド経由で行われます。配列値が渡され、オブジェクト参照が渡されます。

PHP 関数は、return ステートメントに続いてオブジェクト インスタンスを使用してオブジェクトを返すことにより、データをカスタム構造にカプセル化できます。構文: functionget_object():object{}。これにより、カスタム プロパティとメソッドを使用してオブジェクトを作成し、オブジェクトの形式でデータを処理できるようになります。

PHP の Request オブジェクトは、クライアントからサーバーに送信される HTTP リクエストを処理するために使用されるオブジェクトです。 Request オブジェクトを通じて、リクエストを処理して応答するために、リクエスト メソッド、リクエスト ヘッダー情報、リクエスト パラメータなどのクライアントのリクエスト情報を取得できます。 PHP では、$_REQUEST、$_GET、$_POST などのグローバル変数を使用して、要求された情報を取得できますが、これらの変数はオブジェクトではなく配列です。リクエスト情報をより柔軟かつ便利に処理するために、次のことができます。

C++ では、関数がオブジェクトを返すときに注意する点が 3 つあります。 オブジェクトのライフサイクルは、メモリ リークを防ぐために呼び出し元によって管理されます。ぶら下がりポインタを回避し、動的にメモリを割り当てるかオブジェクト自体を返すことにより、関数が戻った後もオブジェクトが有効なままであることを確認します。コンパイラーは、パフォーマンスを向上させるために、返されたオブジェクトのコピー生成を最適化する場合がありますが、オブジェクトが値セマンティクスによって渡される場合、コピー生成は必要ありません。
