周记:闭包

本周学习:本周主要学习了js高级的知识点,包括:原型原型链,作用域作用域链,变量提升函数提升,执行上下文执行上下文栈,闭包,对象创建模式继承模式,进程与线程,浏览器内核,h5 Web Workers等内容。下边写一下关于我对闭包的理解:

1 什么是闭包?

两种理解方式:

理解一:必包是嵌套的内部函数

理解二:包含被引用的变量的对象(注:闭包存在于嵌套的内部函数中)

2 产生闭包的条件?

一:函数嵌套

二:内部函数引用了外部函数的数据变量或函数

三: 执行外部函数(可以不调用内部函数,但必须调用外部函数)

3 闭包的作用是什么?

一:延长局部变量的生命周期

二:让函数外部可以操作(读写)另一个函数中的数据(变量或函数)

4 闭包的优点和缺点以及缺点的解决方式

优点:

一:隐藏变量,避免全局污染

二:读取函数内部的数据

缺点:

一:函数执行完之后函数内局部变量没有释放,占用内存时间会变长;

二:统一造成内存泄漏

缺点的解决方式:

一:能不用就不用

二:及时的释放闭包

5 闭包的生命周期

一:   产生:嵌套的内部函数定义指定完就产生了闭包(不是在调用)

二:死亡:嵌套的内部函数成为垃圾对象时(引用闭包的对象不再引用时)

6 闭包的常见用法

一:return一个函数

var n = 10
function fn1(){
    var n =20
    function fn2() {
       n++;
       console.log(n)
     }
    return fn2
}

var x = fn1()
x() // 21

二:将函数作为一个参数

var a = 'aaa'
function foo(){
    var a = 'foo'
    function fo(){
        console.log(a)
    }
    return fo
}

function f(p){
    var a = 'f'
    p()
}
f(foo())

7 利用闭包实现循环遍历监听(只写出了主要代码)

需求:有几个按钮,需要点击之后显示对应的编号(点击第一个btn打印出来1,点击第二个btn打印出来2)

var btns =document.getElementsByTagname('button');
for (var i=0,length = btns.length;i<length;i++){
(function(i){
 var btn =btns[i];
   btn.onclick = function({
   console.log('第'i+1'个');
  }
})(i)
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
闭包在编程中有很多应用场景,以下是一些常见的例子: 1. 数据封装和私有变量:闭包可以用来创建私有变量,从而实现数据封装和保护。这在模块化编程和面向对象编程中非常有用。 2. 函数工厂:闭包可以用来创建一系列相关的函数,这些函数共享相同的外部变量。这在创建类似于Python中的装饰器或JavaScript中的高阶函数时非常有用。 3. 延迟执行和计时器:闭包可以用来实现延迟执行和定时器功能。例如,在JavaScript中,setTimeout和setInterval函数使用闭包来实现延迟执行和定时器功能。 4. 记忆化(Memoization):闭包可以用来实现记忆化,即缓存函数的计算结果,以便在后续调用中重用。这可以提高函数的性能,特别是在处理计算密集型任务时。 5. 事件处理和回调函数:在JavaScript等事件驱动的编程环境中,闭包常用于实现事件处理和回调函数。闭包可以捕获事件处理函数的上下文,使得事件处理函数可以访问其所需的外部变量。 6. 部分应用(Partial Application)和柯里化(Currying):闭包可以用来实现部分应用和柯里化,这是一种将多参数函数转换为一系列单参数函数的技术。这可以简化函数调用,使得代码更加简洁和可读。 7. 实现迭代器和生成器:在某些编程语言中,例如Python和JavaScript,闭包可以用来实现迭代器和生成器,这是一种用于遍历数据结构的高效方法。
07-14

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值