亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

瀟瀟雨雨 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 關注
  • 622 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號