2

良い一日!

JavaScriptの分野では見たことのないものに出くわしましたが、言語をよく知っている人には簡単に説明できると思います。以下に私は次の機能を持っています:(本から取られたコード: "JavaScript忍者の秘密")

function log() {
  try {
    console.log.apply(console, arguments);
  }
  catch(e) {
    try {
      opera.postError.apply(opera, arguments);
    }
    catch(e) {
      alert(Array.prototype.join.call(arguments, " "));
    }
  }
}

ご覧のとおり、関数は空のパラメータリストで定義されていますが、本の後半で、実際にこのような関数を使用していることに気づいたとき、私は完全に戸惑いました...

var x = 213;
log(x); //Hmmm, I thought this function had an empty parameter list.

誰かが私に説明してもらえますか、なぜその関数呼び出しが許可/可能ですか?この機能をサポートするJSに含まれる概念は何ですか?事前のおかげで、私は非常に混乱しています。

よろしくお願いします、

4

4 に答える 4

10

間違った数のパラメーターを使用して、関数を好きなだけ呼び出すことができます。過剰なパラメータは無視されます。欠落しているパラメーターにはデフォルト値が与えられます。

コードサンプルからわかるように、「arguments」オブジェクトで実際に渡された引数にアクセスできます。

JavaScriptの設計原則の1つは、厳密ではなく寛容であることです。続行する方法があれば、JavaScriptは続行します。十分な数の引数を渡さないと、JavaScriptでは致命的とは見なされません。C#のような言語では、設計原則の1つは、「コンパイル時に失敗することで開発者の注意を引く」ことです。

于 2013-03-10T15:32:21.693 に答える
2

argumentsJavascript関数には、長さプロパティを持つ配列のようなオブジェクトである暗黙のパラメーターがあります。

あなたのlog方法のためにあなたはすることができます。

function log(){

  alert(arguments[0]); 

  alert(arguments[1]);

}

そして、あなたはログを呼び出すことができます。

log("first","second");
于 2013-03-10T15:32:37.263 に答える
1

JavaScript関数は可変個引数です。つまり、任意の無限の引数を取ることができます。argumentsオブジェクトを介してそれらにアクセスし、を介して可変数の値を渡すことができますapply。仮パラメーターリストは、引数へのポインターであるいくつかの変数名を宣言するだけであり、定義されたパラメーター名よりも少ない引数が指定されている場合、デフォルトで。になりますundefined

于 2013-03-10T15:37:48.053 に答える
1

JavaScriptを使用すると、任意の数のパラメーターを使用して関数を呼び出すことができますが、より厳密なものが必要な場合は、TypeScriptがあります。

誤ったメソッド呼び出しや他の多くのJavaScriptの愚かさを防ぎます。

于 2013-03-12T17:52:38.537 に答える