window.onload=函数;
这种写法,是把函数作为一个对象赋值给onload事件,这样当这个事件触发时就会执行这个函数了。
而如果是:
window.onload=函数();
这样就是让函数立即执行,然后把运行后的返回值再赋值给onload事件,这显然是错误的。
window.onload=function(){函数();}
这种写法,则是把一个匿名函数赋值给onload事件,然后在匿名函数内部再执行真正需要执行的函数。这里面的函数加上()就是正确的,而且是必须的,因为这个函数是在匿名函数被onload事件触发后才执行的,这个时候肯定就要立即执行啦。
而如果写成这样:
window.onload=function(){函数();}() //请注意这后面是有括号的
就表示要立即执行匿名函数,然后把返回值赋值给onload事件,这当然也是错误的。
在函数名后面加括号,是表示要立即执行这个函数,这个跟是不是在函数里调用函数是没有半毛钱关系的,在任何地方如果需要运行某个函数都是要加括号的(如果函数运行需要参数,则参数写在括号里,如果没有参数,括号也不能省略!)。
而函数名不带括号,则表示把函数本身作为一个对象赋值给变量或者其他对象的某个属性,在这个过程中,函数并没有被执行,相当于是把自己克隆一份再送给别人。