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

2020-10-21 18:52发布

问题:

代码:

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