当前位置:网站首页>闭包详解,柯里化的含义及操作方法
闭包详解,柯里化的含义及操作方法
2022-08-10 23:22:00 【勇敢*牛牛】
闭包
- 函数当执行完成后,函数中的局部变量将会被销毁
- 当函数作用域还有内部函数调用到了外部的这个局部变量,这个局部变量就会被保存下来,并且会造成内存泄漏
- 闭包特征是创建了私有成员
- 私有成员的特点时,可以像全局变量一样保存数据,累积数据不会因为函数执行完成而被销毁
- 同时也具备独立的运行环境,除此环境外,其他地方无法调用
- 闭包就是 函数执行返回另一个内部的函数,并且这个内部的函数有权访问外部函数中的局部变量
闭包是指有权访问另一个函数作用域中的变量的函数,
创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量
闭包的特点和优点
闭包的特点:
- 1.函数嵌套函数
- 2.函数内部可以引用外部的参数和变量
- 3.参数和变量不会被垃圾回收机制回收
闭包的优点
- 1.希望一个变量长期驻扎在内存中
- 2.避免全局变量的污染
- 3.私有成员的存在
function fun(){
var m=2;
var n=3;
function f1() {
n++;
m++;
console.log(m,n);
}
return f1;
}
var fn = fun();
fn();//3 4
fn();//5 6
当代码中出现全局变量,全局函数名重名的现象,这种情况将会下边覆盖上面的,我们把这个叫做变量污染
var fun1 = (function () {
var a = 3;
return {
b: 7,
sum: function () {
return this.b + a;
}
}
})()
console.log(fun1.sum());
fun1是作为一个自执行函数返回定义的,因此fun1实际上是返回的对象,而对象下有一个方法sum,因此fun1,sum就是调用该对象下的sum方法,注意,a是自执行函数的
私有变量,b是对象的共有属性,因此,调用b的时候this.b可以在对象内调用,也可以在外部使用this.b调用,但是在外部是无法调用变量a的,因为他是局部变量。
柯里化
currying:咖喱:有所有的调料给放在一起成大料的这样的意思
分批次向函数中传入不同的参数,当再次执行不再传参的时候,统一执行最终结果。
function currying(callbcak){
var arr = [];
return function(){
if(arguments.length>0){
arr.push(...arguments);
return arguments.callee;
}else{
return callbcak(...arr)
}
}
}
var f = currying(function(){
return Array.from(arguments).reduce((v,t)=>v+t)
})
f(1,2,3);
f(1,2,3);
var s=f();
console.log(s)//12
边栏推荐
- [uniapp] uniapp WeChat applet development: no such file or directory error when starting the WeChat developer tool
- 二叉树 | 递归遍历 | leecode刷题笔记
- PlaidCTF 2022 Amongst Ourselves: Shipmate writeup
- XSLeaks 侧信道攻击 (unfinished)
- HGAME 2022 Final writeup
- HGAME 2022 Week2 writeup
- Android | 安卓好用软件来袭,多御安全浏览器免费又强大
- 从Todolist入门Svelte框架
- 实例055:按位取反
- Tencent Cloud Lightweight Application Server Configuration and Website Building Tutorial
猜你喜欢
随机推荐
北京党建展馆vr全景制作优点有哪些
Configuring vim(7) from scratch - autocommands
mysql中的三大日志
KRONES克朗斯电源维修0-901-17-350-8技术概论
虎符CTF 2022 Quest-Crash Writeup
关于弱监督学习的详细介绍——A Brief Introduction to Weakly Supervised Learning
一条SQL查询语句是如何执行的?
二叉树 | 代码随想录学习笔记
Blue Hat Cup 2022 web/misc writeup
XSLeaks 侧信道攻击 (unfinished)
实例051:按位与
sklearn.datasets.make_circles
正交基(线性代数)
实例054:位取反、位移动
DASCTF 2022 7月赋能赛 writeup
3d虚拟现实数字化展厅给予参观者充分的交互性和空间感
开源一夏 | 盘点那些 Golang 标星超过 20 K 的优质项目
一文带你了解 ViewModel 的使用及源码解析
浅谈jsfuck编码
卷积神经网络CNN详细介绍