javascript函数闭包

1. 事件闭包的理解

闭包是指有权限访问另一个函数作用域中的变量的函数。 在 javascript 语言中,闭包就是函数和该函数作用域的组合。从这 个概念上来讲,在 js 中,所有函数都是闭包(函数都是对象并且函 数都有和他们相关联的作用域链 scope chain)。

 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的 环境的表达式(通常是一个函数),因而这些变量也是该表达式的一 部分。其实这 句话通俗的来说就是:JavaScript 中所有的 function 都是一个闭包。 不过一般来说,嵌套的 function 所产生的闭包更为强大,也是大部 分时候我们所谓的“闭包”。

2. 变量的作用域 要理解闭包,首先必须理解 Javascript 特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript 语言的特殊之处,就在于函数内部可以直接读取全局 变量。

案例:




	
		
		
		
	
	
	

练习案例1:




	
		
		
		
	
	
	

案例2:

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

案例3:




	
		
		
		
	

	
	

案例4:

javascript函数闭包_第1张图片

这段代码有两个特点: 1、函数 b 嵌套在函数 a 内部; 2、函数 a 返回函数 b。

这样在执行完 var c=a()后,变量 c 实际上是指向了函数 b,再执 行 c()后就会弹出一个窗口显示 i 的值(第一次为 1)。这段代码其实 就创建了一个闭包,为什么?因为函数 a 外的变量 c 引用了函数 a 内 的函数 b,

就是说: 当函数 a 的内部函数 b 被函数 a 外的一个变量引用的时候,就创建 了一个闭包。

你可能感兴趣的:(javascript函数闭包)