闭包

一.闭包原理

**闭包原理:**指有权访问另一个函数作用域当中变量的函数,创建闭包常见的就是在函数中创建另一个函数,创建的函数可以访问当前函数中的局部变量。

我自己的理解:

在函数外部能访问到函数内部的值,在函数中创建另一个函数,并且返回这个创建好的函数,把这个初始函数赋值给一个变量,这个变量接收到的就是一个匿名函数,匿名函数的this又是指向全局对象的,当你把这个匿名函数给这个变量时,this就指向了这个变量,就能创建私有变量,且不会被垃圾回收。缺点:使用过度闭包会消耗内存,造成内存泄漏,当我们使用完闭包后,应该将引用变量滞空。

闭包用途:

1.在函数外部能够访问到函数内部的变量,通过闭包,在外面调用闭包函数,从而在外部访问到函数内部的变量,以此来创建私有变量

2.在已经运行结束的函数上下文中的变量继续留着内存中,因为闭包函数保留了这个变量对象的引用,所以变量对象不会被回收。

列子:

在页面中,有三个按钮,你点击那个按钮就返回按钮的值,寻常使用var来进行声明遍历,var声明的是全局变量,使用var的话就需要使用闭包来实现功能:

alt

第二种就是使用let进行声明变量,let自带块级作用域。

2.防抖

原理:在事件被触发n秒后执行回调,如果在这n秒内事件又被触发,则重新计时。

我自己的理解:事件点击一次触发回调,多次点击,则会重新记时在触发

用途:在一些请求事件上,避免用户多次点击向后台发送请求。

源码解析:

使用情况:

alt

防抖Js 手写

alt

3.节流

原理:在规定的单位时间内,只能有一次触发事件的回调函数执行,如果在同一个时间内被触发多次,只会生效一次。

我自己的理解:在规定的时间内,多次触发,只会触发一次结果

用途:用在scroll函数的事件监听上,通过事件节流来降低事件调用频率

代码原理:时间戳版:第一个参数:需要被触发的函数本身,第二个参数:在这个时间段只能触发一次,定义一个空时间,根据时间戳,去获取当前时间,并把当前时间赋值给这个空时间变量,为的是记录第一次点击的时间,先判断在把时间赋值给空时间,当前时间减去初始时间大于所定义的时间时,才能触发fn函数。

使用场景: alt

​ 1.时间戳版: alt

2.定时器版 alt

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客企业服务