# 闭包
闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数中返回一个函数。
函数柯里化就是闭包的应用。简单实现如下代码所示:
function curry(fn){
var args = Array.prototype.slice.call(arguments, 1);
return function(){
var innerArgs = Array.prototype.slice.call(arguments);
var finalArgs = args.concat(innerArgs);
return fn.apply(null, finalArgs);
};
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
在另一个函数内部定义的函数会将包含函数(即外部函数)的活动对象添加到它的作用域链中。 例子中,在curry函数内部定义的匿名函数的作用域中,实际上会包含外部函数curry的活动对象,匿名函数被销毁,curry的活动对象才会被销毁。
function add(num1, num2) {
return num1 + num2
}
var curriedAdd = curry(add, 1)
console.log(curriedAdd(2)) // 3
// var curriedAdd = curry(add, 1, 2)
// console.log(curriedAdd()) // 3
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8