关于前端:大厂面试必问什么是JS中的闭包

30次阅读

共计 1019 个字符,预计需要花费 3 分钟才能阅读完成。

1. 什么是闭包?
2. 闭包的作用是什么?

首先咱们来简述一下:什么是闭包?

function foo() {

  var a = 2    

  function bar() {console.log(a);
  }

  bar()}

foo()

复制代码 

在下面的代码中,函数 foo 被执行,进而函数 bar 被定义且执行。
此时的函数 bar 能够拜访到变量 a

这就是一个闭包:
「函数」和「函数外部能拜访到的变量」(也叫环境)的总和,就是一个闭包

那来到第二个问题:闭包的作用是什么?

闭包经常用来「间接拜访一个变量」。或者说,「暗藏一个变量」。
假如在一个领取软件中,咱们须要定义用户以后的资金总量,这个数字在很多中央都须要被拜访到,如果不必闭包,或者咱们能用一个全局函数?

window.money = 4396.00
复制代码 

这样看起来很不妥。万一有人不怀好意把这个数改成 7 或者 7777777 了怎么办?

所以咱们不能让他人间接拜访这个变量,咱们,得用局部变量了。

只是用局部变量他人又难以对这个数量进行扭转,怎么办呢?

咱们能够应用闭包,裸露一个函数,实现一个共有变量

此处借用阮一峰老师在闭包文章中的例子

 function f1(){

    var money=999;

    moneyAdd=function(){money+=1}

    function f2(){alert(money);
    }

    return f2;

  }

  var result=f1();

  result(); // 999

  moneyAdd();

  result(); // 1000
复制代码 

这段代码中第一次援用 result 函数的值等于 999,之后援用 result 函数的值等于 1000。

此时的 result 函数其实就是闭包函数 f2,result 值的变动示意 money 曾经成为了“全局变量”,在 f1 被援用后并没有隐没,而是被贮存在某个内存之中,不会在调用完结后,被垃圾回收机制(garbage collection)回收。

延长

闭包的缺点

闭包会导致肯定水平的内存透露:
支流浏览器中都有一个 JS 执行引擎,其中有一个回收机制,回收机制会定时删除不必要的繁杂数据。
然而回收机制无奈回收闭包的函数,及闭包函数中存储的数据。这就会使得浏览器须要更多性能方面的开销。

闭包的其余作用

1. 做缓存,能让多个函数同时作用于一个对象
2. 实现封装,让属性可能私有化
3. 在模块化开发中,能避免净化全局变量

须要 269 前端大厂面试题材料的小伙伴们,请点击这里就能够获取啦

正文完
 0