`
mengzhiang
  • 浏览: 23705 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

闭包的学习

阅读更多

闭包:我个人理解 就是方法返回的不是简单的值,而是一个包含方法的对象(或者说是可执行内容),通过执行返回值可以访问包裹它的对象中的方法。而这些方法一般情况下是不可见的。
或者说,闭包包含包裹类的引用,有权访问包裹类的所有成员。
标准的定义:
闭包:是一个可调用的对象,它记录了一些信息,这些信息来自创建它的作用域。

 

光说不练假把式,还是看代码吧。

 

1:先是JAVA的。

/**
 * @author: mengzhiang
*/
public interface U {
	void f1();
	void f2();
	void f3();
}

 

/**
 * @author: mengzhiang
*/
public class A {
	private int i = 0;
	private void callback(){
		System.out.println("callback"+i++);
	}
	public U getU(){
		return new U(){
			public void f1() {
				callback();
			}
			public void f2() {
				callback();
			}
			public void f3() {
				callback();
			}
		};
	}
}

 

/**
 * @author: mengzhiang
*/
public class B {
	private   U[] items;
	public B(int length){
		items = new U[length];
	}
	private int i;
	public void add(U u){
		items[i++]=u;
	}
	public void setNull(int index){
		items[index] = null;
	}
	public void iterator(){
		for(int j=0;j<items.length;j++){
			U u = items[j];
			u.f1();
			u.f2();
			u.f3();
		}
	}
	public static void main(String[] args){
		//回调,A把对象交给了B,b来调用对象
		//像三个消息
		A a1 =new A();
		A a2 = new A();
		A a3 = new A();
		//消息队列
		B b = new B(3);
		//添加到消息队列中
		//其实添加到b中的不仅仅是一个对象,他是一个闭包他能访问包含他的对象
		b.add(a1.getU());
		b.add(a2.getU());
		b.add(a3.getU());
		//消息队列来执行消息内容
		b.iterator();
		
	}
}

 2:js版的

function A(){
   //回调方法
	function callback(){
		alert("callback");
	}
	//返回可回调的对象
	this.getU = function(){
		return {
			f1:function(){
				callback();
			}
		}
	}
}
//创建对象,并执行方法。
//可以在A方法外面访问A中的callback方法,虽然callback是私有的。
var a = new A();
a.getU().f1();
0
3
分享到:
评论

相关推荐

    js闭包学习

    总之,JavaScript的闭包是一种核心概念,理解和掌握闭包对于深入学习JavaScript以及使用jQuery等库进行前端开发至关重要。通过闭包,开发者可以实现更灵活和高效的设计模式,提高代码质量与可维护性。

    Swift闭包学习

    Swift闭包是编程语言中的一个核心特性,尤其在iOS应用开发中扮演着至关重要的角色。闭包(Closure)可以理解为一段能够捕获并存储其所在上下文中变量的代码块...通过不断实践和学习,你将能更好地理解和运用这一特性。

    js闭包学习心得总结

    通过对标题《js闭包学习心得总结》的阅读和理解,我们可以了解到闭包定义、闭包的创建条件以及闭包的应用场景和在实际编码中可能遇到的问题。 闭包定义: 闭包(Closure)是函数和声明该函数的词法环境的组合。这...

    闭包权威指南] Closure:The Definitive Guide Michael Bolin

    本书旨在为JavaScript开发者提供一个全面深入的闭包学习资源,无论你是初学者还是有一定经验的开发者都能从中获益。 **目标读者:** - JavaScript初学者 - 有一定JavaScript基础但对闭包理解不深的开发者 - 希望...

    新手入门js闭包学习过程解析

    理解闭包的工作原理以及如何利用闭包解决问题,对于深入学习JavaScript和提升编程技能至关重要。在实际开发中,应当根据需求谨慎使用闭包,避免不必要的内存消耗,确保代码的高效性和可维护性。

    js闭包写法学习demo

    JavaScript中的闭包是一种非常重要的概念,它在编程中起着至关重要的作用,特别是在函数式编程和模块化设计中。闭包本质上是函数能够记住并访问其词法作用域内变量的能力,即使该函数在其词法作用域外部被调用。在...

    关系闭包的计算

    本实验旨在通过编程实践的方式帮助学习者深入理解关系闭包的概念,并熟练掌握Warshall算法用于计算关系的自反闭包、对称闭包以及传递闭包。 #### 关键概念解释 1. **自反闭包**:给定集合A上的关系R,如果对于集合...

    js中的闭包学习心得

    JavaScript中的闭包是一种强大的特性,它允许函数访问和操作其外部作用域的变量,即使在外部函数已经执行完毕之后。这种现象是由于JavaScript的词法作用域规则导致的,即函数内部可以访问到在其外部定义的变量,但...

    Swift之闭包ClosureDemo

    Swift中的闭包是一种强大的编程概念,它允许我们定义一段可移动和可重用的代码块,可以在函数中作为参数传递,...通过实践和学习"Swift之闭包ClosureDemo",你将能够更好地掌握这一关键概念,并将其应用到实际项目中。

    最符合菜鸟的闭包

    闭包是编程语言中的一个重要概念,特别是在JavaScript等函数式编程语言中。对于初学者来说,它可能显得有些抽象,但理解闭包对于提升编程技能至关重要。...在学习过程中,深入研究示例代码和实际应用场景是至关重要的。

    用矩阵求自反闭包自反闭包

    因此,深入理解自反闭包的概念和矩阵表示法对于学习这些领域的知识是十分必要的。 综上所述,用矩阵求自反闭包是一种有效且直观的方法,它将抽象的关系理论与具体的数学运算相结合,帮助我们更好地理解和处理关系...

    JS页面获取 session 值,作用域和闭包学习笔记

    以上就是关于JavaScript页面获取Session值,作用域和闭包的相关知识,理解这些概念对于编写高效、健壮的JavaScript代码至关重要。在实际开发中,正确使用作用域和闭包可以帮助我们管理变量,避免全局变量污染,提高...

    C++对称闭包对称闭包

    用矩阵求对称闭包。简洁,轻松学习,相互交流。

    山东大学三元闭包实验

    通过阅读和理解这段代码,学习者可以更好地掌握R语言的编程技巧以及如何应用三元闭包理论解决实际问题。 此外,此实验对于提升逻辑思维能力、理解抽象概念以及熟练运用编程解决复杂问题的能力都有很大的帮助。通过...

    离散实验报告求有限集上给定关系的自反、对称和传递闭包

    在离散数学实验报告中,我们将学习如何求有限集上给定关系的自反、对称和传递闭包。这些概念是离散数学的重要组成部分,对于理解关系闭包的性质和应用具有重要意义。 自反闭包是指关系矩阵中的主对角线全部置为1,...

    跟我学习javascript的闭包

    JavaScript 闭包究竟是什么? 用JavaScript一年多了,闭包总是让人二丈和尚摸不着头脑。陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然...

    关系性质判断及闭包的求法

    我们将深入探讨自反性、对称性和传递性的概念,并学习如何通过不同的方法求解这些性质的闭包。 首先,让我们定义什么是二元关系。在集合A上,一个二元关系R是A的子集,可以看作是A中的元素对{(a, b) | a, b ∈ A}。...

Global site tag (gtag.js) - Google Analytics