関数を呼び出すことを考えました。パラメーターが不要な場合でも、名前の最後に常に()を追加します。
あなたは正しく考えました。ただし、ここでは、関数を呼び出したくありません。時が来たらどの関数を呼び出すかをブラウザに伝えたいと思います。
括弧を追加すると、すぐに(ロード時ではなく)関数が呼び出されます。関数が実行されます。要素を検索しようとしますbodyが、まだロードされていません。したがって、body_element最終的にはundefined。を見上げるchildNodesとundefined、エラーが発生します。window.onload割り当ては発生しません。
関数がエラーをスローしなかったとしても、それはを返したはずなundefinedので、にwindow.onloadなるundefinedので、ページが最終的にロードされても何も起こりません。
代わりに、関数は単なる別の種類の価値であると考え始める必要があります。あなたが言う時
function a() {
// ...
}
これと同じです:
a = function() {
// ...
};
(実際には違いがあり、重要なものがありますが、今のところ関係ありません。基本を理解したら、それらを調べてください)。関数が変数に「含まれる」ようになりましたa。次に、これを行うことができます:
var b = a;
b();
そしてそれは機能します-あなたはa(あなたの関数)にあったものを変数bに入れて、それからその新しい名前を呼び出すことによってそれを実行します(今は両方とも同じ関数aを参照しているので)。b同じように、
window.onload = countBodyChildren;
これで、オブジェクトのonloadプロパティにwindow関数が含まれます。読み込みが完了すると、ブラウザはそこにあるものをすべて実行します。
あなたは時期尚早の死刑執行のケースがありました。