Js閉包有什么例子
JS閉包的作用
慕俠8885228
2017-09-29 09:20:58
TA貢獻19條經(jīng)驗 獲得超17個贊
class?Teammate?{?? ?????? ???public?final?static?String?name?=?"隊友";//名稱?? ?????? ????private??int?num?=?5;//數(shù)量?? ?????? ????{?? ???? System.out.println("王者榮耀五人黑");?? ????}?? ?????? ????/**? ?????*?閉包? ?????*?@return?返回一個表示戰(zhàn)斗的匿名內(nèi)部類? ?????*/?? ????public?Active?BeginFight()??{?? ????????return?new?Active(){?? ????????????public?void?fight()?? ????????????????{?? ????????????????if(num?==?0)?? ????????????????{?? ????????????????????????System.out.println("團滅!");?? ????????????????????return;?? ????????????????}?? ????????????????????num--;?? ????????????????System.out.println("隊友陣亡!");?? ????????????}?? ????????};?? ????}?? ????public?void?currentNum(){?? ????????System.out.println(name+"剩余:"+num);?? ????}?? }?? ?? interface?Active??{?? ????void?fight();?? }?? public?class?Match?{?? ?? ????public?static?void?main(String[]?args)?{?? ????????//來一場比賽? ????????Teammate?t?=?new?Teammate();?? ?????????? ????????Active?fighting?=?t.BeginFight();?? ?????????? ????????//激烈戰(zhàn)斗中 ????????fighting.fight();?? ????????//激烈戰(zhàn)斗中?? ????????fighting.fight();?? ?????????? ????????//看看隊友還在不??? ????????t.currentNum();?? ????}?? ? }
java用匿名內(nèi)部類實現(xiàn)閉包,下面我用JS來實現(xiàn)上面java的代碼!
function?match(){ ????var?teammates=5; ????console.log("王者榮耀五人黑"); ????return?function(){ ???? teammates--; ???? console.log("隊友剩余:"+teammates+"!"); ???? if(teammates==0)return?"團滅"; ????????return?teammates; ????} } var?fight=match(); fight(); fight();
其實閉包就是可以在作用域外使用作用域里的東西,但是會造成內(nèi)存泄漏因為有另一個引用指向它所以垃圾回收機制不會清理有引用的變量!
舉報