前言
本文主要记录了闭包的定义、使用形式以及闭包的应用。
闭包的定义
闭包是涉及独立变量的函数,在闭包中定义的函数会记住它所在环境中的变量。
闭包的使用形式
闭包常见的使用的形式有两种:函数作为返回值,函数作为参数。
函数作为返回值
函数作为参数
闭包的优缺点
优点
- 变量长期驻扎在内存中;
- 避免全局变量的污染;
- 模拟私有成员 ;
缺点
- 会造成内存泄露;
闭包的应用
闭包常见的应用有私有变量、柯里化以及偏函数。
私有成员
function _data (){
// data中的数据被隐藏,不能被外界访问
const data = {}
return {
set: function (key, val){
data[key] = val;
},
get: function (key){
return data[key];
}
}
}
const a = _data();
a.set('name', '张三');
console.log(a.get('name'));
柯里化
柯里化(Currying)是把接受多个参数的函数变换成一系列接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。
// 未柯里化
function add(a, b){
return a + b;
}
// 柯里化
function newAdd(a, b){
return function (b){
return a + b;
};
}
console.log(add(1,2), newAdd(1)(2));
偏函数
偏函数和柯里化类似,柯里化是将n个参数的函数转换成嵌套的一次只传一个参数的n个函数,偏函数比较宽松,不强调单函数,它的目标是将函数入参进行拆解。
function add(a, b, c){
return a + b + c;
}
// 偏函数
function newAdd(a, b){
return function (b, c){
return a + b + c;
};
}
console.log(add(1, 2, 3), newAdd(1)(2, 3));
本文到此结束
如果大家还有什么其他想法,欢迎在评论区交流!