2016-10-12 3 views
0

私は不思議ですが、以下の2つの関数に違いはありますか?コールバックと関数との差異

readyの場合は匿名関数の中で関数を渡すだけですが、もう1つはreadyの場合は実際の関数を渡していますか?

例:

<p>Not loaded yet.</p> 

最初の方法:

function newName() { 
    $("p").text("The DOM is now loaded and can be manipulated.") 
} 

$(document).ready(function() { 
    newName() 
}); 

第二の方法:

function newName() { 
    $("p").text("The DOM is now loaded and can be manipulated.") 
} 

$(document).ready(newName()); 

は一方が他方よりは、より正しいですか?

+1

'$(document).ready(newName());' newName'関数は***ではありません*** DOMがロードされると***が実行されます。これは、すぐに実行し、その戻り値をDOMレディ・ハンドラとして渡すためです。 –

+0

なぜ賛成投票ですか? –

答えて

2

は、実際の名前の関数readyを通過しているときready他のに対し、1だけの無名関数内の関数を渡しますか?

はい、いいえ。

私は不思議ですが、2つの間に違いはありますか?

最初は、イベントが発生したときに実行されるコールバック関数を渡しています。それが火事であっても、hereと説明されています。

後者は、解決済みの戻り値(です(newNameにはreturn文がないため、2番目の戻り値と同じではありません)を渡します。返り値をreadyに渡す理由は、を即座に(これは動作しているように見えるかもしれません)呼び出して、戻り値を渡すからです。彼らは機能同等にするには、実行します。

$(document).ready(newName); 

これは、関数参照を渡しますし、それを呼び出すことはありません。また、前述のように、ready(func(); func2();)を呼び出すことは有効な構文ではありません。

+0

ありがとう!前者は機能しないが、後者は機能しなかったので、彼らは尋ねた。 '$(document).ready(newName(); otherName(); otherName1());'は奇妙に働いたものです。 –

+0

@JoshChristensen:どこを見たかわかりませんが、構文エラーです。おそらく '$(document).ready(function(){newName(); otherName(); otherName1();});'が必要でした。 –

+1

@JoshChristensen最初に、イベントトリガーで実行されるコールバックを渡します。 2番目に、関数を最初に呼び出すと(つまり一見して働いている)、関数の戻り値を 'ready'に渡しますが、これは意味をなさないものです。 – Li357

1

が効果的

$(document).ready(function(){ 
    newName(); 
}); 

と小さな技術的な違いがあります

$(document).ready(newName); 

間に違いありません。最初のスニペットでは、newNameを呼び出す匿名関数が第二のスニペットでは、渡され、命名機能newName自体が渡されます。

関数は、その名前または関数を保持する変数の名前で参照できる単なる呼び出し可能なオブジェクトです。すぐに - - とready戻り値を渡し$(document).ready(newName());newNameを呼び出していること

は注意してください。これは、newNameが別の関数を返す場合にのみ意味を持ちます。この場合はそうではありません。

タイトルには、$(document).ready(newName){}のようなものもあります。私はそれが正しい構文ではないので、それがタイプミスであると仮定しています。

$(document).ready(newName(); otherName(); otherName1());も有効な構文ではありません。

+0

あなたは正しいです、タイトルはタイプミスがあります、ありがとう –

関連する問題