目次
回复内容:
ホームページ バックエンド開発 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的区别。我们还需要继续下去吗?
一般问三个简单的,你都不知道,从统计学上,是吹牛的误判的概率就很小了。

所以不知道闭包,或者知道不够清楚并没有关系。如果很多同级别的问题都不知道,就可以判断你的知识的上限在哪里了。 其实闭包是可以做为评判依据之一,但是我不会主动问。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLを解析するために美しいスープを使用するにはどうすればよいですか? HTMLを解析するために美しいスープを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:54 PM

この記事では、Pythonライブラリである美しいスープを使用してHTMLを解析する方法について説明します。 find()、find_all()、select()、およびget_text()などの一般的な方法は、データ抽出、多様なHTML構造とエラーの処理、および代替案(SEL

Pythonの数学モジュール:統計 Pythonの数学モジュール:統計 Mar 09, 2025 am 11:40 AM

Pythonの統計モジュールは、強力なデータ統計分析機能を提供して、生物統計やビジネス分析などのデータの全体的な特性を迅速に理解できるようにします。データポイントを1つずつ見る代わりに、平均や分散などの統計を見て、無視される可能性のある元のデータの傾向と機能を発見し、大きなデータセットをより簡単かつ効果的に比較してください。 このチュートリアルでは、平均を計算し、データセットの分散の程度を測定する方法を説明します。特に明記しない限り、このモジュールのすべての関数は、単に平均を合計するのではなく、平均()関数の計算をサポートします。 浮動小数点数も使用できます。 ランダムをインポートします インポート統計 fractiから

Pythonオブジェクトのシリアル化と脱介入:パート1 Pythonオブジェクトのシリアル化と脱介入:パート1 Mar 08, 2025 am 09:39 AM

Pythonオブジェクトのシリアル化と脱介入は、非自明のプログラムの重要な側面です。 Pythonファイルに何かを保存すると、構成ファイルを読み取る場合、またはHTTPリクエストに応答する場合、オブジェクトシリアル化と脱滑り化を行います。 ある意味では、シリアル化と脱派化は、世界で最も退屈なものです。これらすべての形式とプロトコルを気にするのは誰ですか? Pythonオブジェクトを維持またはストリーミングし、後で完全に取得したいと考えています。 これは、概念レベルで世界を見るのに最適な方法です。ただし、実用的なレベルでは、選択したシリアル化スキーム、形式、またはプロトコルは、プログラムの速度、セキュリティ、メンテナンスの自由、およびその他の側面を決定する場合があります。

TensorflowまたはPytorchで深い学習を実行する方法は? TensorflowまたはPytorchで深い学習を実行する方法は? Mar 10, 2025 pm 06:52 PM

この記事では、深い学習のためにTensorflowとPytorchを比較しています。 関連する手順、データの準備、モデルの構築、トレーニング、評価、展開について詳しく説明しています。 特に計算グラップに関して、フレームワーク間の重要な違い

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

Pythonでコマンドラインインターフェイス(CLI)を作成する方法は? Pythonでコマンドラインインターフェイス(CLI)を作成する方法は? Mar 10, 2025 pm 06:48 PM

この記事では、コマンドラインインターフェイス(CLI)の構築に関するPython開発者をガイドします。 Typer、Click、Argparseなどのライブラリを使用して、入力/出力の処理を強調し、CLIの使いやすさを改善するためのユーザーフレンドリーな設計パターンを促進することを詳述しています。

美しいスープでPythonでWebページを削る:検索とDOMの変更 美しいスープでPythonでWebページを削る:検索とDOMの変更 Mar 08, 2025 am 10:36 AM

このチュートリアルは、単純なツリーナビゲーションを超えたDOM操作に焦点を当てた、美しいスープの以前の紹介に基づいています。 HTML構造を変更するための効率的な検索方法と技術を探ります。 1つの一般的なDOM検索方法はExです

Pythonの仮想環境の目的を説明してください。 Pythonの仮想環境の目的を説明してください。 Mar 19, 2025 pm 02:27 PM

この記事では、Pythonにおける仮想環境の役割について説明し、プロジェクトの依存関係の管理と競合の回避に焦点を当てています。プロジェクト管理の改善と依存関係の問題を減らすための作成、アクティベーション、およびメリットを詳しく説明しています。

See all articles