winner4265975
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();其实闭包就是可以在作用域外使用作用域里的东西,但是会造成内存泄漏因为有另一个引用指向它所以垃圾回收机制不会清理有引用的变量!