本文目录
高级前端职位面试是否一定要问原型链和闭包
高级前端职位面试不一定问原型链和闭包,但高级前端工程师一定要掌握原型链和闭包。面试问不问这取决于面试官,从技术角度而言没有什么"一定"会问的问题
javascript的“闭包”是什么
在javascript中,闭包是一个难点,也是一个特色,很多高级应用都得靠它实现,而且也是不太容易完全理解的;闭包,顾名思义,就是封闭的,不对外开放的函数语句块,你创建一个函数,实际上它就是一个闭包,不过,闭包通常是在函数内部,即函数中的函数,从而形成“链式作用域”。当然要理解闭包,我们得思考为什么会有闭包这种概念,它的作用是什么?下面通过几个例子来说明下:
一、代码封装
在js中,函数外部全局变量对函数内部是可见的,而在函数内部定义的变量,对外是不可见的。
利用这个特性,在开发中可以用闭包的形式封装重要变量:
这样封装,变量age对外是不可见的,但是,在外部却是可以操作变量age的。
二、缓存
在闭包中引用的变量,外层函数调用后,是不会被垃圾回收机制回收的,可用于缓存计算的结果集,在下次使用时不用重新计算,对性能方面有一定提升;不过,这种情况是会造成内存泄漏的,所以,建议慎用闭包。
obj1在第三次调用的时候,其值为3,说明函数调用后,a的值一直缓存在内存中。
三、自动执行(IIFE模式)
用IIFE模式创建一个匿名函数,它会自动执行,在它内部的变量对外是不可见的。
在闭包内部把age的值改为30,data对象仍没有改变,避免了污染全局变量。
经典面试题思考
一、闭包中,this指向问题。
二、定时器与闭包
三、变量引用与闭包
看懂这三道面试题,对闭包的理解基本差不多了,另外,有不对的地方,还望高人指点。
觉得不错的童鞋,用你发财的小手点个赞呗,蟹蟹支持。
如何才能通俗易懂的解释javascript里面的‘闭包’
我是一名前端,无意间看见这个问题,我来回答一下!
我曾经写过一篇博客用来介绍闭包,谈不上通俗易懂,但是可以理解的比较深入!我个人认为理解闭包的概念的前提是理解作用域以及js的垃圾回收机制!
定义
作用域:变量和函数的可访问范围!
闭包:在某个作用域内定义的函数,它可以访问这个作用域内的所有变量!
从定义上看,我觉得闭包是函数作用域中一种现象,而且在es6之前,js只有函数级作用域,没有块级作用域,那么我们就来看看函数级作用域的特点!
函数级作用域
是所有父变量对象的层级链,处于当前函数上下文之上,在函数创建时存于其中。
全局上下文的变量对象是:
在getIdFac创建时,它的属性是:
在getIdFac执行时,其上下文的活动对象是:
getIdFac上下文的作用域链为:
内部函数cac创建时,其为:
在cac执行时,其上下文的活动对象为:
cac上下文的作用域链为:
内存管理
由于cac在包含它的函数外执行,对全局作用域中的变量x 和 父函数中y存在这个引用,所以呢,x和y所占的存储空间不会被回收!
综上,闭包存在于函数中,它是作用域的一种现象!
喜欢我的回答就关注我吧,有问题可以发表评论,我们一起学习,共同成长!
为何前端面试官都喜欢问闭包
这可作为面试官快速了解应聘者的javascript知识水平的手段。不是为了问闭包而问闭包。如果不搞清楚闭包的原理,就按照面试宝典里的话来套,面试官再往下问一下估计就会知道水平。闭包其实是最能体现javascript语言语法设计的核心,因为实际开发中到处都是闭包,不知不觉的时候开发者其实已经在用闭包了。
比如,面试官问什么是闭包?你回答闭包就是可以让外部作用域可以访问内部变量的一种手段。那面试官会继续问,为什么会这样,说一下原理?如果你不知道作用域链,词法作用域这些概念,那就等于是记住了一个表面知识。
最后,面试的过程是考察的过程,并不是以把应聘者问倒为目的,而是通过逐步深入来了解应聘者的实际技术水平,以便更准确的决定是否符合应聘岗位。
我只是说说我自己作为面试官的一些想法,毕竟也面试过不少人,也许其他面试官也有他自己的一套面试手段,最终目的是为了寻找更适合应聘岗位的同事,如果不是这个目的,那就真的是在装逼糊弄应聘者了。