问题:
代码:
function a() {
return function() {
alert("我正在执行");
}
}
// 点击事件
window.addEventListener('click', a());
为何我这样调用函数也能执行alert代码,不应该使用a()()吗?
难道是window.addEventListener的机制影响了函数的调用吗?
回答1:
js是编译时执行的,window.addEventListener('click', a())
这是就相当于你把function a()
返回的函数提到别的作用域,而你写a()()
这会在加载时调用a()
,然后在调用function a()
的返回值
回答2:
如果直接定义函数,就直接写函数名就行了,所以上面的a()没问题,先调用a获取其返回值然后再调用
function a() {
alert("我正在执行");
}
window.addEventListener('click', a);
回答3:
function a() {} 表示定义一个函数
window.addEventListener('click', a) 表示将函数 a 注册到 window 对象的 click 事件处理程序,当 window 的 click 事件触发的时候,函数 a 就会执行
a() 表示立即执行函数 a
window.addEventListener('click', a()) 表示将函数 a 执行后得到的返回值注册到 window 对象的 click 事件处理程序,当 window 的 click 事件触发的时候执行这个返回值
a()() 表示立即执行函数 a 执行后返回的函数
window.addEventListener('click', a()()) 表示将函数 a 执行后返回的函数再执行之后得到的返回值注册到 window 对象的 click 事件处理程序,当 window 的 click 事件触发的时候执行这个返回值
你搞懂了吗?