前端面试题库

闭包

闭包更新时间:2024-09-01 08:13:33

答案

闭包

JS变量的作用域

变量的作用域分为:全局作用域、函数作用域、块级作用域。

函数内部可以访问外部的变量:

var name = "Jack"; function displayName() { console.log(name) }

但是函数外部不能访问内部的变量:

function displayName() { var name = "Jack"; } console.log(name)

那如何在函数外面访问函数内部的变量呢,聪明的你肯定想到如下操作:

function makeFunc() { var name = "Jack"; function displayName() { console.log(name); } return displayName; } const displayName = makeFunc(); console.log(displayName())

通过外部函数makeFunc返回了内部函数displayName,外界执行displayName就能访问name变量了。该例子就是一个闭包。

闭包的概念

闭包是一个函数及其周边环境状态的引用的组合。就是可以从内部函数访问外部函数的的作用域。MDN的介绍

闭包起到了外界与外部函连接的桥梁作用。

闭包的实际用途
  1. 可以读取函数内部变量,上面例子中的name变量,通过闭包可以读取到。
  2. 保存函数环境的状态,不会再外部环境调用后自动清楚
闭包的缺点
  1. 闭包会使函数的变量保存在内存中,导致内存消耗很大,严重时造成页面性能问题,在低版本浏览器会造成内存泄漏;

评论