背前端程序员面试题:闭包、原型、事件循环

面试问这些,答不出来就吃不上白领饭。

能答出来,才可能有机会吃白领饭。

那么什么是闭包呢?根据洋话文档,闭包是捆绑功能组合。

有的洋话文档说,闭包是函数及词法环境的组合。

我面试的时候答的是,函数变量、词法环境的组合。

我也不知道我这样回答对不对,洋话文档是这样说的,我总不能说洋话文档错了吧。

啥是词法作用域?

比如这,在这个函数里面,声明的变量,叫做本地变量。这就是词法作用域,本地,还是外地?所以词法作用域,有本地外地的区分。也可以说成是本地、局部、外部、全局。说法不一样而已,我认为做代码,没必要死记硬背名词。本来本地、局部,就是做代码的人编的一个词。

比如在这个例子中,闭包干了啥?

这个闭包,意味着这个函数和词法环境组合在了一起。

如果我照着洋文文档背,如果面试官刚好不是背的洋文文档,一定会骂我。

因为中文资料里的闭包不是词法环境和函数的组合。而是读取成员变量的函数。那谁在瞎扯?谁在撒谎?

可我不喜欢背中文文档,我喜欢背洋话文档。

洋文文档说,闭包很有用,因为使用闭包,能够在函数中关联词法环境。有的人喜欢把这段洋话文档说成捆绑函数和词法环境。或者作用域与函数捆绑。如果我背的洋话文档和别人背的中文答案不一致,也不能只怪我。我说的也没错啊。我也是照着洋话文档背的。

可以在任何可以用对象的地方,不用对象,而是用闭包。

闭包可以用来模拟私有方法。

每个闭包有三个作用域。

本地、外部、全局。

这个说法其实我认为是不妥的。

我认为作用域就是本地、外部。相对的。

如果不是本地,就是外部。如果是全局作用域。那全局的外面如果也有一个词法环境、词法作用域呢?叫做全局的全局吗?全全局吗?

作用域只有本地、外部。这样我的理解就和洋话文档都对不上了。

程序员们快来骂我、垃圾东西,连闭包有几个作用域都不会背!

然后还要背这个,在循环中创建闭包是一个错误。

我真的不想背这些面试题。没啥意思。如果真的写代码的时候用的多,每天写一千个闭包,一个月写几万个闭包。那还需要背吗?

如果写的不多,那背了干嘛?就为了面试的时候说我懂闭包?

什么是原型?

原型是JS语言里面实现对象继承的一种机制。

那么到底是啥意思呢?

就是这么一个意思。

一个函数

比如这,人1对象,继承了人原型,人原型又继承了对象这个原型。

我不知道别的程序员是不是每天还是经常写利用原型机制实现JS的继承代码。

我几乎写了几年前端代码了,没有写过几次原型继承。

用的多的就是react里,一个类继承一个react.Component类。

这个原型继承,写的不多,用的不多,但是面试要背。背也要按照中文答案去背。如果就说,js里有一个机制叫做原型,用来实现继承。那么就会被认为基础不行、不配吃白领饭。

中文答案把闭包和原型说的神乎其神。

为啥中文面试题的答案说的那么玄妙呢?

有时候让我说既然你说你知道原型,那么你说一下原型是在哪个字段里。

我背不出来。

有时候想背一些接口的名字,因为怕面试的时候会问。

但是一看到洋话文档说这个接口不推荐用,可能要废弃了,就不太想背了。但面试的时候又要说。

慢慢背吧,只要坚持背,总有一天能背完。

我觉得class关键词不错。

什么是事件循环呢?

洋文文档说,事件循环并发模型负责执行代码、收集处理事件、执行排队的子任务。

中文答案说了一大堆,明显要按照中文答案答,面试官也是背的中文答案,这样面试官才能判断你背的好不好,配不配吃白领饭。

扯了一大堆,说自己能预见js未来是单线程。

又扯了一大堆、说代码执行有栈堆、事件放在队列里。有微任务和宏任务的区分。

还要背微任务永远在宏任务之前执行。

如果能背出来有一个libuv引擎,而且能背出几个阶段,那么就可以说自己精通浏览器实现机制、事件循环并发模型原理了吧,自己特别配吃白领饭。

我真的背不下来,太多了。

真的太多了。

虽然就几百个字。而且就这几个面试题,只要背了这几个,面试官就会说,你答得非常不错。说明你非常懂JS语言底层原理、浏览器底层原理。你非常配吃白领饭。

我喜欢吃代码饭,我想当白领,我喜欢复制粘贴代码,我喜欢网上抄代码。

但我不想背底层原理,怎么办?

我到底要多久才能再吃上白领饭呢?

Learn JavaScript
我还没有学会写个人说明!
上一篇

Bug赏金猎人报告苹果iCloud服务中包含的XSS漏洞 获得5000美元

你也可能喜欢

评论已经被关闭。

插入图片