定义:

一个作用域可以访问另外一个函数内部的局部变量,或者说一个函数(子函数)访问另一个函数(父函数)中的变量,此时就会有闭包产生,那么这个变量所在的函数我们就称之为闭包函数。

例子:

function funA() {var a = 10;  // funA的活动对象之中;return function () {   //匿名函数的活动对象;alert(a);}}var b = funA();b();  //10

优缺点:

闭包的主要作用:延伸了变量的作用范围,因为闭包函数中的局部变量不会等着闭包函数执行完就销毁,因为还有别的函数也要调用它,只有等到所有的函数都掉用完它才会销毁闭包,会造成内存泄露,需要用完之后手动释放。

详解:

闭包不仅仅可以实现函数内部的作用域访问这个函数中的局部变量,还可以实现全局作用域或者是别的地方的作用域也可以访问到函数内部的局部变量,实现方法就是return了一个函数,所以return函数也是我们实现闭包的一个主要原理,因为返回的这个函数本身就是我们fn函数内部的一个子函数,所以子函数是可以访问父函数里面的局部变量的,所以返回完毕之后,外面的函数一调用,就会回头调用返回的这个函数,所以就可以拿到这个子函数对应父函数里面的局部变量。

注意:

1、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能会造成内存泄露。需要在退出函数之前,将不使用的局部变量全部删除。

2、闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当做对象(object)使用,把闭包当做他的公用方法(PubblicMethod),把内部变量当做他的私有属性(privatevalue),这是一定要小心,不要随便改变父函数内部变量的值。

什么是闭包?(前端面试题系列)相关推荐

  1. 「前端面试题系列7」Javascript 中的事件机制(从原生到框架)

    前言 这是前端面试题系列的第 7 篇,你可能错过了前面的篇章,可以在这里找到: 理解函数的柯里化 ES6 中箭头函数的用法 this 的原理以及用法 伪类与伪元素的区别及实战 如何实现一个圣杯布局? ...

  2. 2021前端面试题系列:fetch与axios、浏览器内多个标签页面通信及安全问题

    大家好,我是前端岚枫,今天主要跟大家分享我整理的笔记2021前端面试题系列:fetch与axios.浏览器内标签页之间的通讯方法.XSS 和CSRF以及如何防范,此方面内容在我们的工作中常用到, 也是 ...

  3. 2021前端面试题系列:HTTP请求和HTTP缓存控制

    大家好,我是前端岚枫,一枚二线城市的程序媛,今天主要跟大家分享我整理的笔记2021前端面试题系列:HTTP请求和HTTP缓存控制,此方面内容在我们的工作中常用到, 也是面试官经常提问的问题,希望下面文 ...

  4. 前端面试题系列——css盒子模型

    css盒子模型 css盒子模型就是用来装页面上的匀速的矩形区域,CSS中的盒子模型包括IE盒子模型和标准的W3C盒子模型. 标准W3C盒子模型:包括 margin.border.padding.con ...

  5. 前端面试题 HTML5 CSS3(盒子模型、盒子水平垂直居中、经典布局) JS(闭包、深浅克隆、数据劫持和拦截) 算法(排序、去重、数组扁平化) Vue(双向数据绑定原理、通信方式)

    前端面试题 HTML5 相关面试题 CSS3 相关面试题 盒子模型 盒子水平垂直居中的方案 经典布局方案 圣杯布局 双飞翼布局 flex布局 定位方式布局 css实现三角形 JS 相关面试题 8种数据 ...

  6. promise的状态以及api介绍_2019年,盘点一些我出过的前端面试题以及对求职者的建议

    笔者虽然曾经也面试过很多求职者,但是对于前端的笔试和面试,我觉得并不能体现一个人的真实能力,所以建议大家多修炼前端真正的技术.对于前端面试题,之前也承诺过读者要出一篇,笔者大致总结一下曾经面试的题目. ...

  7. 【前端】前端面试题整理

    前端和计算机相关知识 你能描述一下渐进增强和优雅降级之间的不同吗 浏览器兼容问题 如何对网站的文件和资源进行优化? 怎么学习前端?怎么接触前端新知识? 关于前后端分离 关于浏览器内核(渲染引擎) 浏览 ...

  8. 前端面试题汇总(JavaScript面试纯干货)

    前端面试题汇总(JavaScript面试纯干货) 1 闭包 闭包就是能够读取其他函数内部变量的函数 闭包是指有权访问另⼀个函数作⽤域中变量的函数,创建闭包的最常⻅的⽅式就是在⼀个函数内创建另⼀个函数, ...

  9. 前端面试题【131道】

    前端面试题 1.vue2和vue3的主要区别 3.Apply/call/bind的原理是什么? 4.说说你对原型和原型链的理解? 5.说说你对ES6中Generator的理解 6.说说你对Event ...

最新文章

  1. jQuery Pagination分页插件--无刷新
  2. linux 内核参数 杨,Linux 内核参数
  3. 字库点阵测试程序代码
  4. ASP.NET MVC3 技术(二) WebGrid 的使用方法
  5. python编写加密程序_python编写的维吉尼亚密码加解密程序
  6. 钉钉开发者接口文档_无需开发,IT事件接入钉钉的方法详解
  7. 机器学习基石作业二中的DECISION_STUMP实现
  8. weblogic修改banner_WeblogicScanV1.3
  9. iPhone官方资料链接
  10. 使用envi对图像进行对比度拉伸并保存
  11. [剑指Offer] 第5章课后题详解
  12. 谈话节目APE系列:如何成为技术达人
  13. 冷高轮时间王思聪吃热狗windows电脑壁纸下载
  14. linux版本i686,在Ubuntu中'i686'是什么意思? - Ubuntu问答
  15. 基于Python的人脸识别
  16. 真实经历,说一说本人苹果ipad mini2官方799元以旧换新真实操作
  17. c语言结构体函数传递方式,c-将struct传递给函数
  18. 《从底层结构开始学习FPGA》目录与传送门
  19. 统计局:2018年全国规模以上工业企业利润增长10.3%
  20. 基于SuperMap iDesktop制作天地图1--10级详细说明

热门文章

  1. 大家一起来找茬(BUG)
  2. 经典VU仪表的混音效果工具
  3. 用python3的pyspider爬取国家统计局的行政区域(只到乡镇级,更新到2017年)
  4. Python3爬取国家统计局官网2019年全国所有城市(2020年更新)
  5. 《计算机网络》笔记-第1章计算机网络和因特网
  6. 关于实现StarGen的思考记录
  7. 基于QQ云输入法,用python实现的输入法(demo 版)
  8. Edge浏览器的主页被360篡改的解决办法
  9. mysql-快速入门
  10. Continued Fraction