-4

このコード サンプルは、イベント トリガーの if ステートメントと組み合わせた通常の関数宣言とどう違うのでしょうか? 簡潔さだけが利点ですか?

xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
4

7 に答える 7

3

Javascriptでは、無名関数と呼ばれるものがあります。上記のコードでは、xmlhttp.onreadystatechangeイベントが発生したときに無名関数が実行されます。その他の例は次のとおりです。

window.onkeypress = function(e) {
    alert(String.fromCharCode(e.which));
}

または、匿名の変数関数を作成することもできます...

var myFunc = function(msg) {    // Create function and assign to var
    alert(msg);
}
myFunc("Hello World");          // Call new 'function'
于 2012-04-10T06:17:04.637 に答える
2

識別子関数は、 FunctionDeclarationまたはFunctionExpressionの開始である予約語です。ステートメントの先頭にある場合 (より正確には、ステートメントを配置できる場所にある場合)、それはFunctionDeclarationとして解釈され、次の形式である必要があります。

function <name> (<parameter list>) { <function body> }

FunctionDeclarationの名前は必須です。

ステートメントの先頭にない場合、それはFunctionExpressionであり、名前はオプションです。たとえば、次のようになります。

(function () {…})

var a = function () {…};

someFunction(function () {…})

等々。いずれの場合も、(変数などに) 割り当てたり、呼び出したり、他の関数に渡したり、無視したりできる関数への参照を返します。

于 2012-04-10T06:18:29.143 に答える
1

これは、特定のイベントが発生したときに呼び出される関数を表します。

あなたのコンテキストでは、xmlhttp.onreadystatechange=イベントが発生するとfunction()ブロックが実行されます。

これを次のように書くこともできます

xmlhttp.onreadystatechange=myfunction;

function myfunction()
{
 //code to execute
}
于 2012-04-10T06:09:33.530 に答える
1

onreadystatechangeオブジェクトのプロパティに割り当てられ、次のxmlhttpようにトリガーできるのは通常の機能です。

xmlhttp.onreadystatechange();

チュートリアルを参照してください:

それについてもっと知るために。

あなたは本当に最初に基本を学ぶべきです:)

于 2012-04-10T06:11:31.747 に答える
1

Javascript は無名関数オブジェクトをサポートしています。イベントに関連するコード ブロックを実行する場合は、関数にラップする必要があります。そのための特定の関数が必要ない (コードを再利用したくない) 場合は、関数を匿名のままにしておくことができます。

xmlhttp.onreadystatechange = function () { ... }

これを行うのと似ています:

function foo() { ... }
xmlhttp.onreadystatechange = foo;

ただし、この場合、必要な場所で foo を再利用できます。

于 2012-04-10T06:13:28.443 に答える
0

function(){...}名前のない(「匿名」)関数式です。変数に割り当てたり、引数として使用したりする場合は、名前は必要ありません。この例では、その関数オブジェクトをxhrオブジェクトのハンドラープロパティに割り当てます。ここで、コールバックとして使用されます。

于 2012-04-10T06:16:23.773 に答える
0

関数です。後で実行できるコードのブロックと考えてください。

于 2012-04-10T06:09:42.890 に答える