1、问题的提出
试着说明,oBtn.onclick = al() 和 oBtn.onclick = al 的区别
2、问题的回答
假设有下面的函数:
function al () {
alert("111");
}
此时,
al 代表这个函数的对象,al() 就是直接运行了。
var nfun = al;
就是让 nfun 也指向了 al, 此时 nfun() 就相当于al() 。
那么,说下oBtn.onclick = a1();
oBtn.onclick 也就相当于一个 nfun, 只不过它附属于 oBtn 这个标签。等号是赋值操作如果是对象,就会把对象的指向付给变量。al是对象指向,al()就是执行了函数,它最终是个什么东西,就看函数体返回什么类型,al里就一个alert,没有return任何东西,那么就相当于undefined。所以oBtn.οnclick=undeined了,你执行就没反应。
但是如果al的内部返回的是一个函数比如:
/*函数a1()的执行结果,返回的是另外一个函数*/
function al(){
alert("111")
return function (){
alert("222")
}
}
====================================
oBtn.onclick = al();
就相当于
oBtn.onclick = function(){
alert("222")
}