您当前的位置: 首页 >  Java

命运之手

暂无认证

  • 4浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【编程思想】【闭包】Javascript和Java中的闭包

命运之手 发布时间:2019-09-24 23:30:43 ,浏览量:4

? 闭包的概念 闭包是函数式编程中的一个概念,它是指: 局部函数对象引用了一个局部变量,而这个函数对象又被返回到局部变量所在作用域的外部 从而使得在局部变量的作用域外部,仍然可以通过函数对象来使用这个局部变量

? 闭包在Javascript中的实现


	function a() {
	    let x = 0;
	    function b() {
	        alert(x)
	    }
	    return b;
	}
	
	let c = a();
	//函数a已经执行完毕,变量x的作用域已经结束,但是仍然可以通过c来使用x
	//只有c的作用域结束,变量x占用的资源才可能被回收
	c();

? 闭包在Java中的实现 Java不是函数式编程语言,函数无法作为对象返回,但是Java可以返回一个内部类对象 由于内部类中的成员函数可以完成javascript中的函数对象功能,因为可以通过内部类来实现闭包功能


	public class Message {
	
	    public MessagePrinter getPrinter() {
	        //由于变量message可能被多个内部类对象访问
	        //如果其中一个内部类对象修改了message的地址,其它内部类对象便会指向错误地址
	        //所以被内部类使用的变量应当是final类型的
	        final String message = String.valueOf(new Random().nextInt(100));
	        return new MessagePrinter() {
	            @Override
	            public void print() {
	                System.out.println(message);
	            }
	        };
	    }
	
	    public interface MessagePrinter {
	
	        void print();
	    }
	
	    public static void main(String[] args) {
	        MessagePrinter messagePrinter = new Message().getPrinter();
	        //局部变量message在getPrinter执行完后仍然存在
	        //直到messagePrinter作用域结束后,才有可能被回收
	        messagePrinter.print();
	    }
	}

? 闭包的意义和注意点

  • 闭包在内存中维护了一个匿名变量,每次通过调用内部函数,都可以使用这个匿名变量
  • 闭包增强了这个匿名变量的安全性,除了指定的内部函数,其它对象都无法访问到这个对象
  • 闭包有一定的内存消耗,不能到处滥用
关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0452s