闭包有什么用?

比如这个闭包,f1执行后,返回匿名函数,而匿名函数又不执行,那这个闭包还有用吗? timer会执行吗

    function f1(fn,delay){
    let timer = null 
    return function () {
        if(timer){
            clearTimeout(timer) 
        }
        timer = setTimeout(fn,delay) 
    }
}
阅读 1.2k
1 个回答

比如你定义的f1这个函数,如果不用闭包,就需要在外面定义一个timer,这样的话timer就不是私有的了。
定义了匿名函数不执行,比如let f=f1(()=>{console.log(1)},1000),这时候的f得到是指向f1返回函数的指针,自然不会去执行返回函数里的内容。
你可以试试执行这个:

f1(()=>{console.log('aaaa')},3000)
f=f1(()=>{console.log('ssss')},3000)
f()

如果不调用返回的函数就能执行,最后会打印aaaa和ssss,但是最后其实只打印了ssss,说明不执行就不会调用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题