大白话面试--闭包

作者: 我不信你可以 | 来源:发表于2019-07-02 21:02 被阅读50次

什么是闭包

MDN解释
闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中)。换句话说,这些函数可以“记忆”它被创建时候的环境。


了解闭包首先了解js的‘链式作用域’结构,对象可以一级一级的向上查找父对象的变量,所以父对象的变量对子对象可见,反之不成立;所以都可以访问全局变量;为了解决函数外部无法访问函数内局部变量的问题,就在父函数中定义一个子函数并让它访问了父函数的局部变量,再通过父函数返回该子函数就实现了调用局部变量的效果;而上面中的子函数就是闭包,所以闭包的定义是“能够读取其他函数内部变量的函数”,其实简单理解就是“一个定义在函数中的函数”;

大白话来说就是函数返回一个子函数利用子函数可以访问父函数作用域内定义的变量,然后父函数return返回子函数来让父函数的外部去调用父函数从而调用来子函数来访问到父函数内定义的变量,而这个子函数就被称为闭包。其实就是1.为了解决父函数无法访问子函数内部定义的变量。2.将这个变量维持在内存中


闭包的用处

闭包可以用在许多地方。它的最大用处有两个,

  • 一个是可以读取函数内部的变量
function f1(){
  n=999;
    function f2(){
      alert(n);
    }
    return f2;
}
  var result=f1();
  result(); // 999
  • 另一个就是让这些变量的值始终保持在内存中

function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000


## 闭包的好处和坏处
好处

①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突

②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)

③匿名自执行函数可以减少内存消耗

坏处

①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;

②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响

## 扩展(后续补齐)
1.变量提升。
2.作用域相关。
3.垃圾回收机制原理。


链接转至:https://segmentfault.com/a/1190000013656524

相关文章

  • 大白话面试--闭包

    什么是闭包 MDN解释闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中)。...

  • 闭包1(基础)

    (什么是闭包?闭包的作用?闭包的缺陷?) (闭包的几种可能的应用场景) (闭包与内存泄漏,有关闭包的面试题) 推荐...

  • js闭包问题

    javascript 闭包的概念,闭包的作用,闭包经典面试题详解(配图解) 函数作用域(闭包前置知识) 要彻底弄懂...

  • JavaScript之闭包

    闭包 MDN面试官问我什么是闭包该如何回答廖雪峰博客-闭包阮一峰博客-闭包 个人理解 内部函数可以访问外部函数的作...

  • 【JS】总算能把闭包经典面试题真的讲清楚了

    闭包的经典面试题 说到闭包,那么这个经典的闭包面试题,大家肯定都很熟悉: 这个例子当中为什么i输出的都是5呢?能够...

  • web前端必知篇:闭包的理解

    闭包这玩意,在面试的时候经常被问到。如果你还不了解,小编就简单的讲解一下! 闭包是什么,闭包的优点是什么? 闭包就...

  • js 闭包

    原型链和闭包是每次笔试面试必考的内容。 什么是闭包 一个持有外部变量的函数,就会形成闭包。lexical scop...

  • 什么是闭包

    从入行就有人跟我说闭包,到现在闭包也是前端躲不开的概念,每次面试的时候我也会问一下闭包相关的问题,今天针对闭包写一...

  • javascript复习笔记(2)

    闭包 网上讲闭包的文章一搜一大把。而且面试时,比较传统的问题都有很大几率提到闭包的问题。的确,闭包是js中一个很重...

  • 闭包原理及应用

    这个问题的经典性,几乎所有面试官都会问到这个问题,什么情况下会发生闭包,为什么需要闭包,什么场景下需要,闭包闭了谁...

网友评论

    本文标题:大白话面试--闭包

    本文链接:https://www.haomeiwen.com/subject/tsqxhctx.html