看下面的代码:
<script type="text/javascript">
function createSumFunction(num1, num2){
return function () {
return num1 + num2;
};
}
var sumFun = createSumFunction(3, 4);
var sum = sumFun();
alert(sum);
</script>
在上面的代码中,createSumFunction
函数返回了一个匿名函数,
而这个匿名函数使用了createSumFunction
函数中的局部变量(参数),
即使createSumFunction
这个函数执行结束了,由于作用域链的存在,他的局部变量在匿名函数中仍然可以使用
这个匿名函数和他的作用域链一起就称为闭包。
闭包是指有权访问另一个函数作用域中的变量的函数。
闭包是一种特殊的对象。
它由两部分构成: 函数,以及创建该函数的环境 。
环境由闭包创建时在作用域中的任何局部变量组成。在我们的例子中,sumFun
是一个闭包,由 匿名
函数和闭包创建时存在的num1
和num2
两个局部变量组成。