0

このコードの最後 (完全なコードはこちら)

function addSongs() {
    var song1 = document.getElementById("song1");
    var song2 = document.getElementById("song2");
    var song3 = document.getElementById("song3");

    song1.innerHTML = "Blue Suede Strings, by Elvis Pagely";
    song2.innerHTML = "Great Objects on Fire, by Jerry JSON Lewis";
    song3.innerHTML = "I Code the Line, by Johnny JavaScript";
}
window.onload = addSongs;

addSongs が () で使用されていないことがわかります。

私がそれを次のように変更した場合

window.onload = addSongs();

うまくいきません。なんで?

4

5 に答える 5

6

を持っている場合はaddSongs()、Javascript にその関数をすぐに実行し、その呼び出しの戻り値を onload ハンドラーに割り当てるように指示しています。

がない場合()、関数自体を onload に割り当てるように JS エンジンに指示します。

たとえば、次のようなものがあった場合

function x() {
   return 'hello';
}

// immediately assigns "hello" to the onload
window.onload = x(); 

することと同じです

window.onload = 'hello';

そしてある時点で、onload ハンドラーがトリガーされるたびに、JS エンジンは「hello」という名前の関数を実行しようとします。

于 2012-10-04T19:57:09.053 に答える
1

int a = 5; を割り当てるのと同じように。a が int であることがわかったので、同様に window.onload は関数のように整数値を割り当てることができます。関数型のデータ型であると見なすことができるため、割り当てることができます。

window.onload=function(){ .. some code ... }

または使用できます

function abc(){ ... some code ...}
window.onload=abc;
于 2012-10-04T20:39:05.000 に答える
1

addSongsは、変数 (つまり、この場合は ) に割り当てることができる関数ですwindow.onload。一方、その関数をaddSongs()呼び出しwindow.onloadいるため、返されるものに設定していaddSongs()ます。この場合、これは何もありません。

于 2012-10-04T20:01:38.150 に答える
0

addSongs() を使用すると、呼び出されたときではなく、すぐに実行されます。

于 2012-10-04T19:57:03.310 に答える
0

onload関数と等しくなるように設定しているためです。

関数を呼び出すと、関数の値 (この場合は)onloadと等しくなるように設定されます。returnundefined

onload/onready/onclick/etcまた、いつ発火するかを制御することはできません。それがポイントです。それらのいずれかが発生したときに関数を起動するようにブラウザに要求しています-前ではありません。

于 2012-10-04T20:00:54.560 に答える