I noticed a difference when calling a function with empty parentheses, or without any parentheses at all. However, I am not passing any arguments to the function so I wondered, what would be the difference between:
window.onload = initAll();
and
window.onload = initAll;
Please explain the principle behind it.
This executes
initAll()straight away and assigns the function’s return value towindow.onload. This is usually not what you want.initAll()would have to return a function for this to make sense.this assigns the actual function to
window.onload– this is possible because in JavaScript, as @Felix says, functions are first class objects – without executing it.initAllwill be executed by the load event.You may also see something like this:
This will create a new function that, when called, will call
initAllimmediately. Parentheses are necessary here for that "callinitAllimmediately" part to work. But, because it’s wrapped in a function, nothing will execute until that outer function itself is called, and you assign the reference of that outer function towindow.onload, soinitAllwill also be executed on the load event.