为了账号安全,请及时绑定邮箱和手机立即绑定

函数里面返回函数到底有什么用呢?

函数里面返回函数到底有什么用呢?

潇潇雨雨 2019-04-19 16:29:37
经常会看到这样关于函数的写法:varcal=function(a){varplus=function(){returna+1;}returnplus;}varfn=cal(3)();我了解这个地方主要是使用了闭包。但是一般像这种函数里面再返回函数的写法有什么用呢?或者说运用在哪些场景里面?
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

像这种用法最大的用处是:“延迟一个函数的执行,让它仅在需要时才会执行,但其执行环境会被一直保留到执行时(闭包)”。
最常见的例子是在绑定事件的时候需要带上参数,一种方法是把参数定义为全局变量:
vara=123;
xxx.onclick=function(){
alert(a);
};
但这样做会严重污染全局变量,尤其是需要绑定的事件很多的时候。而且这种方法在通过代码动态绑定事件时也不方便。例如我想给2个对象绑定同一个事件,但是参数不一样,此时用上面的代码就不好处理了。
这时候就是高阶函数发挥用武之地的时候了:
vargetHandler=function(a){
returnfunction(){
alert(a);
};
};
xxx1.onclick=getHandler(123);
xxx2.onclick=getHandler(456);
当然,场景不局限于添加事件。只要是需要延迟执行一个函数,但又想让该函数记住执行环境,这时候就可以用到高阶函数。
                            
查看完整回答
反对 回复 2019-04-19
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

1、防止变量污染全局变量,在闭包里定义的变量,外部是不可以访问的,比如a你可以在这里面任意使用,但是不影响在其他地方重新定义一个a
2、高阶函数,应该说闭包只是高阶函数实现的时候出现的一个特征而已。这样做的好处就是可以用函数生成函数。简单来说,比如有个加法的函数:
functionadd(a){
varadda=function(b){
returna+b;
}
returnadda;
}
有了这样一个函数,当我们需要一个+3的函数的时候,就可以varadd3=add(3)需要+4的函数时候就可以varadd4=add(4);好处就是,实现了一个稍微复杂一点儿的函数,就可以生产很多相对简单的函数,这样可以提高代码的复用。
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 692 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号