面试-闭包

211 阅读3分钟
作为一个嘴笨的程序员,总是无法get到点?说出的话毫无章法?那就看看这些吧。三年老年前端带走向正确技术面~


-->进入正题

从实际的项目经历中,闭包的使用变得不再同过去那么频繁了,但是这个前端基本点还是总是会从面试官的嘴中冒出来,令人费解(后面有解释)……

MDN解释:闭包是一种特殊的对象。闭包是函数和声明该函数的词法环境的组合

我的理解:闭包=函数+函数体内可访问的变量总和

简单讲:闭包就是指有权访问另一个函数作用域中的变量的函数

那怎么讲:我理解就是比较巧妙的利用了函数作用域的特性(后面有说)。私有变量的访问 修改一类的用法也是。说白了 都是作用域的问题。还有个细节就是这个变量不会被收回,所以你可以一直访问和修改。再往下问就是经典的内存泄漏问题了。

实现个:

(function() {
    var a = 1;
    function add() {
        var b = 2

        var sum = b + a
        console.log(sum); // 3
    }
    add()
})()
//add函数本身,以及其内部可访问的变量,即 a = 1,这两个组合在一起就被称为闭包,仅此而已。

闭包的max作用:隐藏变量

闭包的max特性:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后

闭包的实例:jQ;私有变量

私有变量实现个:

function Person(){
    var name = 'cxk';
    this.getName = function(){
        return name;
    }
    this.setName = function(value){
        name = value;
    }
}

const cxk = new Person()

console.log(cxk.getName()) //cxk
cxk.setName('jntm')
console.log(cxk.getName()) //jntm
console.log(name) //name is not defined
// 函数体内的var name = 'cxk'只有getName和setName两个函数可以访问,外部无法访问,相对于将变量私有化。

-->面试官会怎么问

写在开始:传统的肯定是先抛出问题来解题,但是面试嘛,肯定是先看答案才畅快,这点我深有体会~~

  1. 说下闭包吧?PS:这种面试官多数就是一面
  2. 通过代码来暗示这个是什么的?在你回答了闭包之后,在解释下闭包?以及闭包的作用
  3. 闭包在项目中实际使用?

-->谈一谈

那为什么会很多面试官问闭包呢?

其实闭包说白了是个函数作用域的问题,但能以闭包为切入点,把JS要的理解点,问个遍。从作用域->引申到垃圾回收->循环依赖->内存泄漏->dom对象和JS对象的不同->this作用域->再到原型链->面向对象->甚至再到js引擎->浏览器内核。


写在最后:

闭包这个知识点多数不能左右你面试的进程,但是如果你不会,那就麻烦大了,也就是说不能加分只能减分的知识点(PS:这也是很多面试官喜欢的原因~~),另外更伤心的是这种知识点在前端技术架构中还有很多……

另外文中多数都是cv,别介意,都是为了学习🐶~~