Jadual Kandungan
回复内容:
Rumah pembangunan bahagian belakang Tutorial Python 为何前端面试官都喜欢问闭包?

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

Jun 06, 2016 pm 04:23 PM

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

回复内容:

大致是这样:

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的区别。我们还需要继续下去吗?
一般问三个简单的,你都不知道,从统计学上,是吹牛的误判的概率就很小了。

所以不知道闭包,或者知道不够清楚并没有关系。如果很多同级别的问题都不知道,就可以判断你的知识的上限在哪里了。 其实闭包是可以做为评判依据之一,但是我不会主动问。
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Muzium Dua Point: Semua Pameran dan Di Mana Mencari Mereka
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks Mar 05, 2025 am 09:58 AM

Tutorial ini menunjukkan cara menggunakan Python untuk memproses konsep statistik undang -undang ZIPF dan menunjukkan kecekapan membaca dan menyusun fail teks besar Python semasa memproses undang -undang. Anda mungkin tertanya -tanya apa maksud pengedaran ZIPF istilah. Untuk memahami istilah ini, kita perlu menentukan undang -undang Zipf. Jangan risau, saya akan cuba memudahkan arahan. Undang -undang Zipf Undang -undang Zipf hanya bermaksud: Dalam korpus bahasa semulajadi yang besar, kata -kata yang paling kerap berlaku muncul kira -kira dua kali lebih kerap sebagai kata -kata kerap kedua, tiga kali sebagai kata -kata kerap ketiga, empat kali sebagai kata -kata kerap keempat, dan sebagainya. Mari kita lihat contoh. Jika anda melihat corpus coklat dalam bahasa Inggeris Amerika, anda akan melihat bahawa perkataan yang paling kerap adalah "th

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Mar 10, 2025 pm 06:54 PM

Artikel ini menerangkan cara menggunakan sup yang indah, perpustakaan python, untuk menghuraikan html. Ia memperincikan kaedah biasa seperti mencari (), find_all (), pilih (), dan get_text () untuk pengekstrakan data, pengendalian struktur dan kesilapan HTML yang pelbagai, dan alternatif (sel

Modul Matematik dalam Python: Statistik Modul Matematik dalam Python: Statistik Mar 09, 2025 am 11:40 AM

Modul Statistik Python menyediakan keupayaan analisis statistik data yang kuat untuk membantu kami dengan cepat memahami ciri -ciri keseluruhan data, seperti biostatistik dan analisis perniagaan. Daripada melihat titik data satu demi satu, cuma melihat statistik seperti min atau varians untuk menemui trend dan ciri dalam data asal yang mungkin diabaikan, dan membandingkan dataset besar dengan lebih mudah dan berkesan. Tutorial ini akan menjelaskan cara mengira min dan mengukur tahap penyebaran dataset. Kecuali dinyatakan sebaliknya, semua fungsi dalam modul ini menyokong pengiraan fungsi min () dan bukan hanya menjumlahkan purata. Nombor titik terapung juga boleh digunakan. Import secara rawak Statistik import dari fracti

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Mar 10, 2025 pm 06:52 PM

Artikel ini membandingkan tensorflow dan pytorch untuk pembelajaran mendalam. Ia memperincikan langkah -langkah yang terlibat: penyediaan data, bangunan model, latihan, penilaian, dan penempatan. Perbezaan utama antara rangka kerja, terutamanya mengenai grap pengiraan

Serialization dan deserialisasi objek python: Bahagian 1 Serialization dan deserialisasi objek python: Bahagian 1 Mar 08, 2025 am 09:39 AM

Serialization dan deserialization objek Python adalah aspek utama dari mana-mana program bukan remeh. Jika anda menyimpan sesuatu ke fail python, anda melakukan siri objek dan deserialization jika anda membaca fail konfigurasi, atau jika anda menjawab permintaan HTTP. Dalam erti kata, siri dan deserialization adalah perkara yang paling membosankan di dunia. Siapa yang peduli dengan semua format dan protokol ini? Anda mahu berterusan atau mengalirkan beberapa objek python dan mengambilnya sepenuhnya pada masa yang akan datang. Ini adalah cara yang baik untuk melihat dunia pada tahap konseptual. Walau bagaimanapun, pada tahap praktikal, skim siri, format atau protokol yang anda pilih boleh menentukan kelajuan, keselamatan, kebebasan status penyelenggaraan, dan aspek lain dari program

Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka? Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka? Mar 21, 2025 pm 06:46 PM

Artikel ini membincangkan perpustakaan Python yang popular seperti Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask, dan Permintaan, memperincikan kegunaan mereka dalam pengkomputeran saintifik, analisis data, visualisasi, pembelajaran mesin, pembangunan web, dan h

Bagaimana untuk membuat antara muka baris arahan (CLI) dengan python? Bagaimana untuk membuat antara muka baris arahan (CLI) dengan python? Mar 10, 2025 pm 06:48 PM

Artikel ini membimbing pemaju Python mengenai bangunan baris baris komando (CLI). Butirannya menggunakan perpustakaan seperti Typer, Klik, dan ArgParse, menekankan pengendalian input/output, dan mempromosikan corak reka bentuk mesra pengguna untuk kebolehgunaan CLI yang lebih baik.

Mengikis halaman web dalam python dengan sup yang indah: carian dan pengubahsuaian dom Mengikis halaman web dalam python dengan sup yang indah: carian dan pengubahsuaian dom Mar 08, 2025 am 10:36 AM

Tutorial ini dibina pada pengenalan sebelumnya kepada sup yang indah, memberi tumpuan kepada manipulasi DOM di luar navigasi pokok mudah. Kami akan meneroka kaedah dan teknik carian yang cekap untuk mengubahsuai struktur HTML. Satu kaedah carian dom biasa ialah Ex

See all articles