闭包

闭包是指有权访问另一个函数作用域中的变量的函数。
创建闭包的常见方式,就是在一个函数内部创建另一个函数。
有关如何创建作用域链以及作用域链有什么作用的细节,对彻底理解闭包至关重要。
当某个函数被调用时,会创建一个执行环境以及响应的作用域链,然后使用argument 和其他命名参数的值来初始化函数的活动对象,但在作用域链中,外部的函数的活动对象始终处于第二位,外部函数的外部函数的活动对象处于第三位…直至作为作用域链终点的全局执行环境。

function compare(value1,value2){
		if(value1 value2){
			return 1;
		}else{
			return 0
		}
	}
	var result  = compare(5,10);

以上代码先定义了函数compare,然后又在全局作用域中调用了它。当调用compare()时,会创建一个包含arguments、value1、value2的活动对象,全局执行环境的变量对象(包含result 和compare)在compare()执行韩晶的作用域链中处于第2位。
闭包_第1张图片
需要知道的是在创建compare变量的时候,会创建一个预先包含全局变量对象的作用域链,无论什么时候函数访问一个变量时,就会从作用域链中搜索具有相应名字的变量,一般来讲,当函数执行完毕后,局部变量对象就会被销毁,内存中仅保存全局作用域,但是,闭包的情况又有所不同。

参考:javascript高级程序设计

你可能感兴趣的:(前端知识)