概念

闭包:能够读取其他函数内部变量的函数。
JavaScript中,函数都有自己的块级作用域,即在函数内部定义的变量只有在函数本身的内部作用域内可被访问,函数外部无法访问。闭包可理解为函数外部读取函数内部变量的一个桥梁。使私有的局部变能够被多个函数共享,而不被JavaScript的解析器自动的从内存中释放掉。

有什么用?

闭包最大的用处可总结为两个:

  1. 一种就是上面提到的使函数外部能够读取到函数内部的变量;
  2. 让函数内部的变量一直隐藏/保存在内存中(JavaScript的垃圾回收机制:解释器检测到没有程序在使用这个对象了,当它确定其是无用的时候,JavaScript的解释器就把会把该对象所占用的内存释放掉)。

但是要注意的使:闭包使得函数中的变量一直保存在内存中,会使内存消耗很大,所以对于闭包的使用也要谨慎,否则可能会造成网页性能问题,在IE中可能会导致内存泄漏。所以在退出函数之前,应将不使用的局部变量全部删除。

怎么用?

一种是在函数内部使用return:

function test(){var a=12;function inner(){var b=2;var c=a+b;return c;}ruturn inner;
}
var run=test();//当地调用test()时,将inner作为函数返回回来。
console.log(run());//-->14

一种是通过函数传参的方式:

function test(){var a=12;function inner(){var b=2;var c=a+b;return c;}func(inner);
}
function func(fn){console.log(fn());
}
test(); //-->14

什么是闭包?有什么用?怎么用?相关推荐

  1. Python 闭包、单个装饰器、多个装饰器、装饰器修饰类、应用场景

    1. 闭包 在 Python 中,函数也可以作为参数.我们可以执行下面的代码: def func(a, b):return a + bprint(func) 我们直接输出函数名,而没有加括号.输出结果 ...

  2. Python 高级特性 (1)- 闭包

    1. 闭包的概念 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包.闭包可以用来在一个函数与一组"私有"变量之间创建关联关系 ...

  3. [JS] 闭包与内存泄漏

    一句话总结闭包:函数里套函数,函数返回函数. 内存泄漏:每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址.但凡是当前活动对象中有被内部子集引用的数据,那么这个时候,这个数据不删 ...

  4. php的闭包函数use的使用

    PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字. function getMoney() {   $rmb = 1;   $dollar = 6;   $fun ...

  5. python之路-day11-迭代器闭包

    一 . 函数名的运用 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1.函数名的内存地址 def func(): print("呵呵") print(fu ...

  6. 函数小知识点(文档字符串,闭包等)

    1 文档字符串(Documentation Strings) 一般被称为docstring,一款你应当使用的重要工具,它能够帮助你更好地记录程序并让其更加易于理解.令人惊叹的是,当程序实际运行时,我们 ...

  7. Go 学习笔记(18)— 函数(04)[闭包定义、闭包修改变量、闭包记忆效应、闭包实现生成器、闭包复制原对象指针]

    1. 闭包定义 Go 语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说: 函数 + ...

  8. Python 精选笔试面试习题—类继承、方法对象、包管理、闭包、可变类型作为默认参数、列表引用、sort与sorted、 append 和 extend、深拷贝和浅拷贝

    1. 类继承 如下代码 class A(object):def show(self):print 'This is calss A'class B(A):def show(self):print 'T ...

  9. 读javascript高级程序设计03-函数表达式、闭包、私有变量

    一.函数声明和函数表达式 定义函数有两种方式:函数声明和函数表达式.它们之间一个重要的区别是函数提升. 1.函数声明会进行函数提升,所以函数调用在函数声明之前也不会报错: test(); functi ...

  10. Python的闭包和装饰器

    什么是闭包 python中函数名是一个特殊的变量,它可以作为另一个函数的返回值,而闭包就是一个函数返回另一个函数后,其内部的局部变量还被另一个函数引用. 闭包的作用就是让一个变量能够常驻内存. def ...

最新文章

  1. python基础教程3-Python基础教程(三)
  2. wex5教程 宝塔面板+lnmp+wex5项目部署
  3. 黑马商城项目级联选择占满全屏解决方案
  4. 开发缺点_开发移动端手机APP有哪些优缺点?
  5. [单选题]?php echo ceil(2.1/0.7); ?
  6. 数据库(5)SQL约束
  7. java的值传递和引用传递
  8. 装机员Ghost一键备份还原使用方法(硬盘装系统)
  9. “国防七子”经费暴增,清华再增45亿,甩第二名101亿 |全国高校2022预算大公开...
  10. 取消管理员取得所有权_win7下取得管理员所有权的技巧
  11. 点是否在三角形内——C++实现
  12. 带弧CAD和GDB数据导入ARCSDE后面积一致性问题
  13. 浅谈魔兽世界的BUFF系统和阵营系统
  14. c++primer plus 6 读书笔记 第四章 复合类型
  15. 張潮《幽夢影》:「讀史宜夏」
  16. 数据库设计文档化---详细文档
  17. 【数学与算法】向量内积(点乘)和外积(叉乘)概念及几何意义
  18. Retrofit 上传文件
  19. 服务器上出现应用程序错误
  20. 直播app开发解决方案

热门文章

  1. 修补汽车深度划痕的方法
  2. 扫雷小游戏 2.0版本
  3. mongodb 子文档排序_猫鼬101:基础知识,子文档和人口简介
  4. IDEA 数据库插件Database Navigator 插件
  5. Linux | 新建虚拟硬盘并挂盘
  6. CC2530基础实验:(10)系统睡眠唤醒--中断唤醒
  7. 数据库在当前时间加上指定的时分秒(mysql,DM)日期
  8. YDOOK :STM32 : stm官方网站 官方芯片手册下载方法
  9. 总结拼多多,美团JAVA面试经验,成功收获美团,小米offer
  10. 人工智能98%都认错,图像识别AI遇上对抗性图像竟变“瞎子”!