JS函数中return一个函数,如何调用这个函数,使得返回值是嵌套的函数的返回值?

2020-10-21 18:08发布

代码:

function a() {
return function() {
alert("我正在执行");
}
}
// 点击事件
window.addEventListener('click', a());

为何我这样调用函数也能执行alert代码,不应该使用a()()吗?
难道是window.addEventListener的机制影响了函数的调用吗?

3条回答
Emotional °昔
2楼-- · 2020-10-21 18:57

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 事件触发的时候执行这个返回值
你搞懂了吗?

查看更多
▲ chillily
3楼-- · 2020-10-21 18:58

如果直接定义函数,就直接写函数名就行了,所以上面的a()没问题,先调用a获取其返回值然后再调用

function a() {
    alert("我正在执行");
}
window.addEventListener('click', a);
查看更多
beautiful°
4楼-- · 2020-10-21 19:07

js是编译时执行的,window.addEventListener('click', a())这是就相当于你把function a()返回的函数提到别的作用域,而你写a()()这会在加载时调用a(),然后在调用function a()的返回值

查看更多
登录 后发表回答