JavaScript闭包例子

function outerFun()
	{
		var a=0;
		function innerFun()
		{
			a++;
			alert(a);
		}				
	}
innerFun()


上面的代码是错错误的.innerFun()的作用域在outerFun()内部,所在outerFun()外部调用它是错误的.

改成如下,也就是闭包:
function outerFun()
{
	var a=0;
	function innerFun()
	{
		a++;
		alert(a);
	}
	return innerFun;  //注意这里
}
var obj=outerFun();
obj();  //结果为1
obj();  //结果为2
var obj2=outerFun();
obj2();  //结果为1
obj2();  //结果为2

什么是闭包:

当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.

--------------------------------------------------------------------------------------------------------

再来看一个例子
function outerFun()
{
	var a =0;
	alert(a);		
}
var a=4;
outerFun();
alert(a);


结果是 0,4 .  因为在函数内部使用了var关键字 维护a的作用域在outFun()内部.

再看下面的代码:
function outerFun()
{
	//没有var 
	a =0;
	alert(a);		
}
var a=4;
outerFun();
alert(a);

结果为 0,0 真是奇怪,为什么呢?

作用域链是描述一种路径的术语,沿着该路径可以确定变量的值 .当执行a=0时,因为没有使用var关键字,因此赋值操作会沿着作用域链到var a=4;  并改变其值.

你可能感兴趣的:(JavaScript)