javascript基础八(知识点类闭包)

原创 2015年07月08日 14:17:40

/**
 * 一:什么是闭包
 * 	1:函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回
 * 	例一:
 * 
 * 二:闭包有什么好处
 * 1:希望变量长期驻扎在内存中
 * 2:避免全局变量的污染 例二	
 * 3:私有成员的存在
 *
 * 用法:
 * 1:代码模块化  例三
 * 2:可以在循环中直接找到对应元素的索引(例四)
 * 	
 * 三:闭包需要注意的地方
 * 在ie下会引发内存泄露 (关于内存泄露问题,文章底部)
 */

// 例一start:
function aaa(a){
	var b = 5;
	function bbb(){
		alert(a);
		alert(b);
	}
}
aaa() //当函数执行后变量不会被垃圾回收机制所收回,因为在函数内部所调用
// js中的垃圾回收机制
function ccc(){
	var a = 1;
}
ccc();  //当函数执行后变量就会被js中的垃圾回收机制所收回
// 例一end:
// 
// 例二start:
var a =1;
function ddd(){
	a ++;
	alert(a);
}
ddd();	//2
ddd();	//3
alert(a) //3

function eee(){
	var  a = 1;
	a ++;
	alert(a);
}
eee();	//2
eee();	//2
// 那么怎么可以做到,让a即是局部变量,又可以叠加:so:闭包
function aaa(){
	var a = 1;
	return function bbb(){
		a++;
		alert(a);
	}
}
var b = aaa();
b() 	//2
b() 	//3
alert(a)//报错
// 例二end:
// 例三start
var aaa = (function(){
	var a = 1;
	function bbb(){
		a ++;
		alert(a);
	}
	function ccc(){
		a ++;
		alert(a);
	}
	return {
		b : bbb,
		c : ccc
	}
})();
aaa.b();
aaa.c();
// 例三end

// 例四start
for(var i=0;i<oLi.length;i++){
	(function(i){
		oLi[i].onclick = function(){
			alert(i);
		}
	})(i)
}
//或者
for(var i=0;i<oLi.length;i++){
	oLi.onclick = (function(i){
		return function(){
			alert(i);
		}
	}(i))
}
// 例四end
IE中内存泄露的几种方式:


1、循环引用(Circular References) — IE浏览器的COM组件产生的对象实例和网页脚本引擎产生的对象实例相互引用,就会造成内存泄漏。这也是Web页面中我们遇到的最常见和主要的泄漏方式;

2、内部函数引用(Closures) — Closures可以看成是目前引起大量问题的循环应用的一种特殊形式。由于依赖指定的关键字和语法结构,Closures调用是比较容易被我们发现的;

3、页面交叉泄漏(Cross-Page Leaks) — 页面交叉泄漏其实是一种较小的泄漏,它通常在你浏览过程中,由于内部对象薄计引起。下面我们会讨论DOM插入顺序的问题,在那个示例中你会发现只需要改动少量的代码,我们就可以避免对象薄计对对象构建带来的影响;

4、貌似泄漏(Pseudo-Leaks) — 这个不是真正的意义上的泄漏,不过如果你不了解它,你可能会在你的可用内存资源变得越来越少的时候极度郁闷。为了演示这个问题,我们将通过重写Script元素中的内容来引发大量内存的"泄漏"。

参考:http://www.cnblogs.com/meteoric_cry/archive/2010/09/14/1825951.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JAVA基础知识点(八)--包、模版模式、object类

一、包: java中的包就相当于windows文件夹。 包的作用:          1. 解决类名重复产生冲突的问题。          2. 便于软件版本的发布。 定义包的格式:      ...

学习javascript基础知识系列第四节 - 闭包

闭包的含义: Wikipedia:在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离...
  • isea533
  • isea533
  • 2013年09月10日 09:51
  • 1460

面试题:(考察闭包,this指向,预解析,函数执行顺序等知识点)

案例(不带注释版)var num = 20; var obj = { num : 30, fn : (function (num) { this.num *= 3; ...

Swift 基本知识点之五闭包

闭包表达式(Closure Expressions) 尾随闭包(Trailing Closures) 值捕获(Capturing Values) 闭包是引用类型(Closures Are Refere...

JS闭包知识点整理

JS闭包这是一个术语,但是用通俗的解释就是函数里的函数! 这是一个相当麻烦的概念,所以我有些不知道从哪里整理,真是无语。 还是循序渐进的弄吧! 首先引入一个概念:函数的作用域(scope...

JavaScript语言基础知识点总结

  • 2013年01月14日 16:40
  • 2.1MB
  • 下载

JavaScript经常忽略或误用的七个基础知识点

JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它。昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序。很多新...
  • tywali
  • tywali
  • 2014年03月10日 18:49
  • 369

JavaScript的函数,声明变量和作用域等7个基础知识点总结

为了备战学校的卓越杯,整理了一下JavaScript的一些知识点。 1. 相等操作符。 JavaScript提供两种相等操作符。 (1)相等(==)和不相等(!=) 相等和不相等操作符工作...

JavaScript基础知识点归纳

(1)JavaScript中有5种原始数据类型:Undefined、Null、Boolean、Number以及String。其中Undefined数据类型的值只有一个undefined,Null数据类...

JavaScript 高级程序设计(第四章)基础知识点

**变量,作用域和内存问题** 4.1 ECMAScript变量的可能包含两种不同数据类型的值:基本类型值(简单的数据段)和引用类型值(多个值构成的对象)。 4.11 只能给引用类型值动态的添加属...
  • zxlsara
  • zxlsara
  • 2016年04月04日 18:53
  • 225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javascript基础八(知识点类闭包)
举报原因:
原因补充:

(最多只允许输入30个字)