为何前端面试官都喜欢问闭包?

企鹅博客
企鹅博客
企鹅博客
25193
文章
0
评论
2020年10月5日04:14:50 评论 7 views 2698字阅读8分59秒

很多公司前端开发职位相关的面试官都喜欢问闭包。能否理解闭包可以当作评判一个前端开发的依据?

回复内容:

大致是这样:

1,面试题以半开放问题为佳。闭包就是个半开放问题。所谓半开放,就是说你可以就你知道的随便说,但是大致上有一些点面试官可以守着,看看你说的是否全面、准确。

2,这个问题可以追问。根据你的回答情况,面试官可以补充若干递进问题。比如作用域,变量提升,引用传递,异常捕获等等,涉及到的点还是比较多的。而且能追问不是显得比较有面子嘛是吧?

3,这个问题是普适的。一方面它确实是个基础问题,入口点完全是初级的,就算你经验很少,也不应该一句答不出来。另一方面,它和平台的相关性比较小,也基本不随着业界格局变化,较为稳定。像内存泄露他就不太好问,你来一句“这个话题过时了”咋整?

4,就 js 语言本身,它不像 C++ 一样有着灿若繁星的特性。实际上真正适合面试的,可选择的问题并不多,面试官也未必就有能力出更好的题目。而且 js 不像 java,在语言之上建立了层层公认的业务框架,js 连个标准库都没有。你面 java,问个 struts,spring,hadoop 什么的,天经地义啊,可是面试官面 js 的时候,除了 jquery,还有什么库能安全提问呢?你问个 react,人家说没用过,也天经地义啊。

5,最终形成的局面就是,“请解释一下闭包”,“请问如何实现面向对象”,“请解释一下this关键字”…… 什么是闭包,回答多种多样,对 JavaScript 理解层次的不同会有不一样的答案。

有次面试官问我什么是闭包,我按照我的理解回答了,他却要我写出一个闭包来…一个函数里返回一个函数…然后他满意了…这种水平我基本是不会去的。 前端不懂闭包也能将就用各种框架开发,前端门槛本来就低,各种轮子也把很多工作傻瓜化了。

闭包能把只会用轮子的人筛下去。

作用域是JS里不多的需要理解的东西,其他的框架,函数,API什么的就是个查文档的事。

闭包说白了是个函数作用域的问题,作用域-引申到垃圾回收-循环依赖-内存泄漏-dom对象和JS对象的不同-this作用域-再到原型链-面向对象-甚至再到js引擎-浏览器内核。

能以闭包为切入点,把JS要的理解点,问个遍。

如果是一个多语言开发者,能引申更多的东西,比如不同语言的各种回收算法,循环依赖,强弱引用,其他静态语言支持闭包的也不少,部分静态语言编译器级的闭包实现。

闭包是很简单,不为考技术,更为能检验一个人是不是真的对JS这种语言有兴趣,是不是有求知欲和好奇心,是不是有基本的学习能力和理解能力,这些都是一个开发人员该有的基本素质。

能力经验到了一定阶段,都不是为了面技术,更是为了了解对开发工作的态度,学习理解的深度和沟通的感觉。

个人是先学静态语言如c,java,后来接触的JS,最开始实在难以理解JS的函数作用,其实没有一点静态语言基础的反而更好理解。

终于搞明白的那一刻,深吸了口气,那感觉真爽。 我面试人从来不问闭包。

因为我认为闭包太简单了,没啥好问的。

更新,答 @niko :

问任何这类问题,总可以考察一些方面。但是面试的效率决定了你需要不断找到更好的问题。怎么样是更好的问题,参见 @winter 的谈谈面试与面试题 · Issue #4 · wintercn/blog · GitHub
拿区分度、深度、覆盖率来考察下“如何理解闭包”这个问题,跟其他问题比是不太理想的。 路过

随便说几句

可能这几个因素

1、因为普遍具有实际用途

2、有着相对的有比较明确的答案

3、具有普遍认知度的问题,除了这几个真是没啥可问的

比如偶几年前校招时候浏览器问过

元素的内联事件处理函数的查找顺序

就是

这个 a 函数是怎么被浏览器找到的

是否所有实现查找都一致

没人能答对啊

就连问题都得说几次才能明白

说白了就是问的偏了

还不如问闭包来的直接呢

知道闭包的再问问使用场景

差不多能确定普通搬搬砖

不会给惹大麻烦什么的了吧 你都知道会问 还不会 就有点奇怪了。

我一般都问 for 100个按钮 bind click 怎么log对index。 然而对于闭包最准确的描述应该是 @niko 答案里面的一条:闭包就是一个函数内部可以访问函数外部的现象表述。

可以做下:Learning Advanced JavaScript
这几个例子,深入理解下。

至于那些 onclick 或者 setTimeout 的例子,简直有些误导,那些例子之所以能 OK 更多的是因为立即执行函数创建了一个个小作用域,将 i 传递到函数里面的小作用域中,当调用起 onclick 的函数之后,会在小作用域里面搜索。还有一个点就是往函数传参的时候,是传值的,而不是传地址的。这个例子基本没有表现出什么闭包的特性,反而让一些「新手」非常直观的认为:闭包就是包裹一层立即执行函数。

建议 @刘洋 思考一下在 @小爝 评论里的 demo Edit fiddle - JSFiddle
,去掉 arr[i].index 这行,在 onclick 里面直接打印 i 为什么不行?因为你的立即执行函数创建的作用域里面,还是没有 i 这个变量,结果 onclick 执行往上层作用域寻找 i 的时候,此时 i 为 10。 看你面试的是什么人吧。

就像贺老 @贺师俊说的,他从不面闭包,因为闭包太简单,也因为他不需要那个level的工程师吧。

我也不问,不过和贺老不一样,我不问是因为不会(划掉)因为这个问题问烂了,简直是必背面试题之一了。而且你知道怎么说和真的了解在哪用怎么用的更好,并没有什么关系。

要说基础,比这个基础的东西多得多~ 其实吧。有些看似很傻的问题只是用来甄别要不要再问更深的问题的步骤。

好比那些背单词的软件,总要从易到难的。

一般都是从简单的如padding, margin区别(CSS), alt和title的区别呀(html), ==和===的区别呀(js)

这样开始的。闭包只是再向上一点点的台阶。

好比,你写了说你精通css3,然后不知道padding, margin的区别。我们还需要继续下去吗?

一般问三个简单的,你都不知道,从统计学上,是吹牛的误判的概率就很小了。

所以不知道闭包,或者知道不够清楚并没有关系。如果很多同级别的问题都不知道,就可以判断你的知识的上限在哪里了。 其实闭包是可以做为评判依据之一,但是我不会主动问。

  • 微信
  • 分享
  • 相关标签:
  • 本文原创发布php教程 ,转载请注明出处,感谢您的尊重!
    • 上一篇:用R语言的公司多吗?
    • 下一篇:软件测试,如何工资过万?

    相关文章

    相关视频

    • 在Django框架中运行Python应用全攻略
    • 在Python的Django框架中创建和使用模版
    • python获取元素在数组中索引号的方法
    • 浅谈python中截取字符函数strip,lstr...
    • 为何前端面试官都喜欢问闭包?
    • PHP开发基础教程之简介
    继续阅读
    新手python用什么版本好? python教程

    新手python用什么版本好?

    想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个好呢? python3 和 python...
    python中队列的实现方法(代码示例) python教程

    python中队列的实现方法(代码示例)

    本篇文章给大家带来的内容是关于python中队列的实现方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 对于python来说,要实现一个队列的类根据已经有的方法,是很简...
    匿名

    发表评论

    匿名网友 填写信息

    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: