面试问这些,答不出来就吃不上白领饭。
能答出来,才可能有机会吃白领饭。
那么什么是闭包呢?根据洋话文档,闭包是捆绑功能组合。
有的洋话文档说,闭包是函数及词法环境的组合。
我面试的时候答的是,函数变量、词法环境的组合。
我也不知道我这样回答对不对,洋话文档是这样说的,我总不能说洋话文档错了吧。
啥是词法作用域?
比如这,在这个函数里面,声明的变量,叫做本地变量。这就是词法作用域,本地,还是外地?所以词法作用域,有本地外地的区分。也可以说成是本地、局部、外部、全局。说法不一样而已,我认为做代码,没必要死记硬背名词。本来本地、局部,就是做代码的人编的一个词。
比如在这个例子中,闭包干了啥?
这个闭包,意味着这个函数和词法环境组合在了一起。
如果我照着洋文文档背,如果面试官刚好不是背的洋文文档,一定会骂我。
因为中文资料里的闭包不是词法环境和函数的组合。而是读取成员变量的函数。那谁在瞎扯?谁在撒谎?
可我不喜欢背中文文档,我喜欢背洋话文档。
洋文文档说,闭包很有用,因为使用闭包,能够在函数中关联词法环境。有的人喜欢把这段洋话文档说成捆绑函数和词法环境。或者作用域与函数捆绑。如果我背的洋话文档和别人背的中文答案不一致,也不能只怪我。我说的也没错啊。我也是照着洋话文档背的。
可以在任何可以用对象的地方,不用对象,而是用闭包。
闭包可以用来模拟私有方法。
每个闭包有三个作用域。
本地、外部、全局。
这个说法其实我认为是不妥的。
我认为作用域就是本地、外部。相对的。
如果不是本地,就是外部。如果是全局作用域。那全局的外面如果也有一个词法环境、词法作用域呢?叫做全局的全局吗?全全局吗?
作用域只有本地、外部。这样我的理解就和洋话文档都对不上了。
程序员们快来骂我、垃圾东西,连闭包有几个作用域都不会背!
然后还要背这个,在循环中创建闭包是一个错误。
我真的不想背这些面试题。没啥意思。如果真的写代码的时候用的多,每天写一千个闭包,一个月写几万个闭包。那还需要背吗?
如果写的不多,那背了干嘛?就为了面试的时候说我懂闭包?
什么是原型?
原型是JS语言里面实现对象继承的一种机制。
那么到底是啥意思呢?
就是这么一个意思。
一个函数
比如这,人1对象,继承了人原型,人原型又继承了对象这个原型。
我不知道别的程序员是不是每天还是经常写利用原型机制实现JS的继承代码。
我几乎写了几年前端代码了,没有写过几次原型继承。
用的多的就是react里,一个类继承一个react.Component类。
这个原型继承,写的不多,用的不多,但是面试要背。背也要按照中文答案去背。如果就说,js里有一个机制叫做原型,用来实现继承。那么就会被认为基础不行、不配吃白领饭。
中文答案把闭包和原型说的神乎其神。
为啥中文面试题的答案说的那么玄妙呢?
有时候让我说既然你说你知道原型,那么你说一下原型是在哪个字段里。
我背不出来。
有时候想背一些接口的名字,因为怕面试的时候会问。
但是一看到洋话文档说这个接口不推荐用,可能要废弃了,就不太想背了。但面试的时候又要说。
慢慢背吧,只要坚持背,总有一天能背完。
我觉得class关键词不错。
什么是事件循环呢?
洋文文档说,事件循环并发模型负责执行代码、收集处理事件、执行排队的子任务。
中文答案说了一大堆,明显要按照中文答案答,面试官也是背的中文答案,这样面试官才能判断你背的好不好,配不配吃白领饭。
扯了一大堆,说自己能预见js未来是单线程。
又扯了一大堆、说代码执行有栈堆、事件放在队列里。有微任务和宏任务的区分。
还要背微任务永远在宏任务之前执行。
如果能背出来有一个libuv引擎,而且能背出几个阶段,那么就可以说自己精通浏览器实现机制、事件循环并发模型原理了吧,自己特别配吃白领饭。
我真的背不下来,太多了。
真的太多了。
虽然就几百个字。而且就这几个面试题,只要背了这几个,面试官就会说,你答得非常不错。说明你非常懂JS语言底层原理、浏览器底层原理。你非常配吃白领饭。
我喜欢吃代码饭,我想当白领,我喜欢复制粘贴代码,我喜欢网上抄代码。
但我不想背底层原理,怎么办?
我到底要多久才能再吃上白领饭呢?