搜索
写经验 领红包
 > 教育

web前端面试项目中遇到的问题(web前端面试常见问题)

导语:web前端开发面试过程中遇到的难题:什么是闭包?优缺点是什么?

web前端面试项目中遇到的问题(web前端面试常见问题)

快年底了,想必大伙搞web前端的肯定也有很多会选择辞职,然后找新工作加工资吧。

不过小编建议还是明年开春出来找比较稳妥,因为现在年底的话大部分公司都在沉淀员工,加上员工想拿完年终奖在走。所以年底岗位相对过完年回来要少得多,少的话机会就少了。

那么给大家及时分享一个面试中比较难回答好的问题:什么是闭包?

先看看定义:有权访问另一个函数作用域中的变量的函数。额,第一眼看确实有点难理解——不过,我给大家画张图,让大家先知道它是个什么玩意儿。

用上图解释上面闭包的定义就是:function2是有权访问function1的作用域中的变量,它们有包含关系。这也是创建闭包最常见的一种方式,即:函数中执行函数。

那到底这样的执行过程到底经历了哪些呢?我们在回答面试官的时候该从哪个点开始讲起呢?让我们先从底层的运行机制开始。函数执行时作用域链的概念。

当一个函数第一次被执行的时候,会创建一个执行环境跟作用域链,并且把作用域赋值给一个内部的特殊属性叫[[Scope]],然后使用,this,arguments初始化活动对象,在整个作用域链当中,函数外部的活动对象始终是排在第二位。然后 依次往上升,排在第二位外部函数的活动对象,相对于第一个函数就是第三位。一直到全局执行环境。

当一个函数另一个函数内运行时,被包含的函数会拥有包含函数的作用域链,也就是说在内部的函数它不仅有自己的作用域,还包含了包含它函数的作用域。看下图:

配合上图来解释就是:函数funs它包含了函数bi的作用域跟活动对象,所以它可以访问到外面传进来的name跟sex属性。也就是执行结果会是name,sex。这里有个重点,当bi函数执行结束后,活动对象并没有被销毁,因为funs函数还在引用其活动对象。只有到funs函数执行结束,活动对象销毁后,bi函数的活动对象才会销毁。这里就存在着两个问题:一、内存问题;二、闭包存在的依赖性问题。

总结两点重要的闭包特性就是:

1、被包含函数的作用域包含了包含函数的作用域跟活动对象

2、闭包存在依赖性,占用内存,尽量避免少用

本文内容由小纳整理编辑!