2012-04-10 8 views
-4

このコードサンプルは、イベントトリガのif文と対になる通常の関数宣言とどのように異なるのですか?簡潔さは唯一の利点ですか?javascriptでは "function()"とは何ですか?

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

爆心:一度は実行されません。イベントが発生すると実行されます。これは通常複数回あり、上記のコードは(エラーなしに)複数回起動します。 – Shane

+0

あなたが何を言っているのか分かりません。匿名関数は、適切なアクセスが与えられれば、何度も呼び出すことができます。以下の私のコメントを参照してください。できるだけ最後の行を何度もコピーすることができます。匿名関数を呼び出すことのできる時間の量には即座の制限はありません。 – Shane

+0

@Bakudan:いいえ、あなたは自己表現的(主に匿名)の関数式を意味します。参照を持つすべての関数は、複数回実行できます。 – Bergi

答えて

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' 
+1

質問を理解し、正確で正確な答えを与えることに感謝します。どのようにそうすることができたか私には驚くべきことです。 – Aerovistae

+0

ホープが助けてくれることを願っています:) – Shane

1

指定されたイベントに対して呼び出される関数が発生します。

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

また、それが関数である

xmlhttp.onreadystatechange=myfunction; 

function myfunction() 
{ 
//code to execute 
} 
+0

これは私が確認しようとしていたものでした。ありがとうございました。 – Aerovistae

+0

@Aerovistae - あなたは大歓迎です。upvote –

0

としてこれを書くことができます。後で実行できるコードブロックと考えてください。

+0

あなたはこれについて全く考えていませんでした。 「改善のヒント」の他の回答を参照してください。 – Aerovistae

1

それはxmlhttpオブジェクトのonreadystatechangeプロパティに割り当てられているとしてトリガすることができ、通常の関数です。詳細をお知りになり

xmlhttp.onreadystatechange(); 

は、チュートリアルを参照してください。それについて。

あなたは本当に最初の基礎を学ぶ必要があります:)

+0

それを呼び出すと、再びすべての作業が繰り返されますか? – kommradHomer

+0

@kommradHomer:関数を作成したら、必要な回数だけ呼び出すことができます。結局のところ、それは何のための機能です。 – Sarfraz

+0

値を返すとどうなりますか?何かに縛られておらず、いつも同じものに変わる価値ですか? – kommradHomer

1

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

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

:あなたがそれを必要な場所

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

が、この場合では

は、あなたがfooを再利用することができます。

0

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

2

識別子機能FunctionDeclarationののいずれかの開始であるか、予約語でありますファンクション式。それは(ステートメントが可能な場所では、より正確に)、ステートメントの開始時なら、それはFunctionDeclarationのとして解釈され、形式である必要があります。

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

名FunctionDeclarationが必要です。

文の先頭にない場合は、FunctionExpressionであり、名前は任意です(例:それは:

(function() {…}) 

var a = function() {…}; 

someFunction(function() {…}) 

などとすることができます。すべての場合において、それは(例えば変数に)割り当てられ、呼び出されたり、他の関数に渡されたり、無視されたりすることができる関数への参照を返します。

+0

RobG、これは非常に良い答えですが、私はちょっと考えていてOPのためにそれを簡素化することができたと思います。しかし、それ以外の良い答えに投票する。 – Shane

関連する問題