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

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

JS閉包的作用

JS閉包的作用

慕俠8885228 2017-09-29 09:20:58
Js閉包有什么例子
查看完整描述

2 回答

?
winner4265975

TA貢獻19條經驗 獲得超17個贊

class?Teammate?{??
??????
???public?final?static?String?name?=?"隊友";//名稱??
??????
????private??int?num?=?5;//數量??
??????
????{??
????	System.out.println("王者榮耀五人黑");??
????}??
??????
	????/**?
?????*?閉包?
?????*?@return?返回一個表示戰斗的匿名內部類?
	?????*/??
????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();??
??????????
????????//激烈戰斗中
????????fighting.fight();??
????????//激烈戰斗中??
????????fighting.fight();??
??????????
????????//看看隊友還在不???
????????t.currentNum();??
????}??
?
}

java用匿名內部類實現閉包,下面我用JS來實現上面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();

其實閉包就是可以在作用域外使用作用域里的東西,但是會造成內存泄漏因為有另一個引用指向它所以垃圾回收機制不會清理有引用的變量!

查看完整回答
1 反對 回復 2017-09-29
?
Samaritan

TA貢獻61條經驗 獲得超38個贊

很早之前寫過一篇帖子,不知道能不能幫到你?JavaScript 閉包究竟是什么

查看完整回答
反對 回復 2017-09-29
  • 2 回答
  • 2 關注
  • 1630 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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