JavaScriptの引数

Dec 14, 2016 am 09:28 AM
javascript

function aaa(sTemplate) {  
var args = arguments;  
var s = sTemplate;
  s = s.replace(/\%\%/g, "%");
  for (var i = 1; i < args.length; i++)     
  s = s.replace( new RegExp("\%" + i + "\%", "g"), args[i] )
  return s;}
ログイン後にコピー

arguments は配列ではありませんが、添字は 0 から始まるため、

arguments[0] は受け取った最初のパラメーターを表します

arguments[1] は受け取った 2 番目のパラメーターを表します

。 ..

など...

このようにして、同じ関数を異なるパラメータで呼び出すことができます~

もちろん、関数がパラメータの処理方法を設定していることが前提です。そうでない場合は、 vain

arguments 属性

は、現在実行中の関数オブジェクトが引数オブジェクトを返します。

function.arguments

function パラメータは現在実行中の関数の名前であり、省略できます。

argument オブジェクトの length プロパティには、関数に渡される引数の数が含まれます。引数オブジェクトに含まれる単一パラメータのアクセス方法は、配列に含まれるパラメータのアクセス方法と同じです。

argument 属性の使用法を説明するために例を抜粋しました。以下を参照してください:

function ArgTest(){
   var i, s, numargs = arguments.length;
   s = numargs; 
   if (numargs < 2){
      s += " argument was passed to ArgTest. It was ";
   }else{
      s += " arguments were passed to ArgTest. They were " ;
   }
   for (i = 0; i < numargs; i++){
         s += arguments[i] + " ";
   }
   return(s);
}
ログイン後にコピー

Quote:

1. 引数の賢い使い方

Javascript 関数には、arguments という名前の配列のようなオブジェクトがあります。とても奇妙で知られていないように思えますが、数多くの Javascript ライブラリがその強力な機能を使用しています。したがって、その機能を利用するには、すべての JavaScript プログラマーがこの機能に精通している必要があります。

各関数には、現在の呼び出しのパラメーターを配列のような形式で保存する、arguments という名前の変数があります。また、実際には配列ではありません。typeof argument ステートメントを使用しようとすると、「object」(オブジェクト) が返されるため、Array のような Push や Pop などのメソッドは使用できません。それでも、添え字と長さ属性を使用してその値を取得できます。

2. 柔軟な関数を作成する

あまり知られていないようですが、引数は確かに非常に便利なオブジェクトです。たとえば、関数で可変数の引数を処理させることができます。 Dean Edwards によって作成された Base2 ライブラリには、この機能を最大限に活用する format という関数があります。

function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });
};
ログイン後にコピー

replace の 2 番目のパラメータは関数にすることができ、関数の最初のパラメータは match にすることができます。テキストのパラメータはこれらの場所を順番に置き換えます。例:

format("そして、%1 は、あなたが %2 であることを知りたいと思っています", "papers", "shirt", "wear");

上記のスクリプトは

を返します。あなたが誰のシャツを着ているかを知るためです。」

ここで注意する必要があるのは、フォーマット関数の定義でも、string という名前のパラメータのみを定義していることです。 Javascript を使用すると、関数自体で定義されたパラメーターの数に関係なく、関数に任意の数のパラメーターを渡し、呼び出された関数の引数オブ​​ジェクトにこれらのパラメーター値を保存できます。

3. 実際の配列に変換します

引数オブジェクトは実際の Javascript 配列ではありませんが、次のコードのように、配列のスライス メソッドを使用して配列に変換できます

var args = Array.prototype .slice.call(arguments);

call(obj, 現在の関数で使用されるパラメータリスト)

call メソッドの最初のパラメータはオブジェクトであり、渡されたオブジェクトはスライス関数を呼び出します。引数は配列ではないため、スライスメソッドを直接呼び出すことはできません。このように、配列変数 args にはすべての引数オブ​​ジェクトに含まれる値が含まれます。

4. パラメーターで関数を構築します

引数オブジェクトを使用すると、記述する Javascript コードの量を減らすことができます。以下は、指定した関数名とその他の任意の数のパラメーターに基づいて匿名関数を返す makeFunc という関数です。この匿名関数が呼び出されると、元の呼び出しのパラメーターがマージされて、指定された関数に渡されて実行され、その戻り値が返されます。

function makeFunc() {
  var args = Array.prototype.slice.call(arguments);
  var func = args.shift();
  return function() {
    return func.apply(null, args.concat(Array.prototype.slice.call(arguments)));
  };
}
ログイン後にコピー

arguments には列挙不可能な属性 callee (for in では読み取れず、HasOwnProterty (名前) で判断可能) があり、arguments.callee は実行される Function オブジェクトです。現在の関数ポインターはスライス時にコピーされているため、args の最初の要素は関数の型です。makeFunc の最初のパラメーターは、呼び出される関数の名前を指定します (はい、この単純な例ではエラー チェックは行われません)。取得後の引数から。 makeFunc は、Function オブジェクトの apply メソッドを使用して指定された関数を呼び出す匿名関数を返します。

apply メソッドの最初のパラメーターはスコープを指定します。基本的に、スコープは呼び出される関数です。ただし、この例では少し複雑に見えるため、 null に設定します。2 番目のパラメーターは、呼び出す関数のパラメーターを指定する配列です。 makeFunc は、呼び出された関数に渡す前に、独自の引数を変換し、匿名関数の引数を連結します。

有种情况就是总是要有个输出的模板是相同的,为了节省每次是使用上面提到的 format 函数并指定重复的参数,我们可以使用 makeFunc 这个工具。它将返回一个匿名函数,并自动生成已经指定模板后的内容:

var majorTom = makeFunc(format, "This is Major Tom to ground control. I'm %1.");

你可以像这样重复指定 majorTom 函数:

majorTom("stepping through the door");

majorTom("floating in a most peculiar way");

那么当每次调用 majorTom 函数时,它都会使用第一个指定的参数填写已经指定的模板。例如上述的代码返回:

"This is Major Tom to ground control. I'm stepping through the door."

"This is Major Tom to ground control. I'm floating in a most peculiar way."

五、自引用的函数

您可能会认为这很酷,先别急着高兴,后面还有个更大的惊喜。它(arguments)还有个其他非常有用的属性:callee 。arguments.callee 包含了当前调用函数的被引用对象。那么我们如何使用这玩意做些的事情?arguments.callee 是个非常有用的调用自身的匿名函数。

下面有个名为 repeat 的函数,它的参数需要个函数引用和两个数字。第一个数字表示运行的次数,而第二个函数定义运行的间隔时间(毫秒为单位)。下面是相关的代码:

function repeat(fn, times, delay) {
  return function() {
    if(times-- > 0) {
      fn.apply(null, arguments);
      var args = Array.prototype.slice.call(arguments);
      var self = arguments.callee;
      setTimeout(function(){self.apply(null,args)}, delay);
    }
  };
}
ログイン後にコピー

repeat 函数使用 arguments.callee 获得当前引用,保存到 self 变量后,返回个匿名函数重新运行原本被调用的函数。最后使用 setTimeout 以及配合个匿名函数实现延迟执行。

作为个简单的说明,比如会在通常的脚本中,编写下面的提供个字符串并弹出个警告框的简单函数:

function comms(s) {
  alert(s);
}
ログイン後にコピー

好了,后来我改变了我的想法。我想编写个“特殊版本”的函数,它会重复三次运行每次间隔两秒。那么使用我的 repeat 函数,就可以像这样做到:

var somethingWrong = repeat(comms, 3, 2000);

somethingWrong("Can you hear me, major tom?");

结果就犹如预期的那样,弹出了三次警告框每次延时两秒。

最后,arguments 即便不会经常被用到,甚至显得有些诡异,但是它上述的那些惊艳的功能(不仅仅是这些!)值得你去了解它。

undefined ≠ null

null是一个对象,undefined是一个属性、方法或变量。存在null是因为对象被定义。如果对象没有被定义,而测试它是否是null,但因为没有被定义,它无法测试到,而且会抛出错误。

if(myObject !== null  && typeof(myObject) !== &#39;undefined&#39;) {
//如果myObject是undefined,它不能测试是否为null,而且还会抛出错误
}
if(typeof(myObject) !== &#39;undefined&#39; && myObject !== null) {
//处理myObject的代码
}
ログイン後にコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

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

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

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

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

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

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

See all articles