如果不是本质是前端,建议不用太过学习js基础,会增删改查,但是想做一名资深前端开发,那基础必须得是杠杠的;说白了,就是为了拿更多工资,提高自身的学习能力
在面试前端开发时,闭包,原型链,递归都是常见的面试题,当然,如果你掌握了,其实就会发现,搞懂他们都不是难事,难的是你能利用它去开发,自己用它去写个库,更甚是给他人用
闭包
百科的解释:闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数”
当我们需要使用某个函数中的变量,
1 | function fn() { |
这其实就是个闭包,那他怎么使用呢,👇
1 | var f = fn() |
作用是什么呢 => 可以在函数外部操作或获取函数内部的变量和函数
为什么会这样呢,原因是js的垃圾回收机制,function函数执行完都会被垃圾回收机制回收,释放,但是在闭包中,他不会被回收,就达到了反复利用的作用;在我理解中,它是这样的:
1 | var f = fn() |
这时候创建了一个变量,变量存在了栈中,而栈中被释放了才会回收
在中,有个”window”属性,也是”this”
1 | <script> |
这其实也相当于一种闭包;只是上例中”fn”函数变成了”window”对象:我们这里利用的变量a就是”fn”函数中的变量a,而”fnChildren”操作的a就是”fn”函数的变量a,等同于我们在操作了”window”的变量a,这样说是不是就很清晰明了。
当然,这是我个人理解,如有错,各位大神可以指出。
递归
递归在开发还是比较常见的,使用也很简单:
1 | var num = 0; |
这其实就是个递归,当然,这只是个简单的例子,常见例子中,多级菜单,权限设置列表很常见就是条件不满足自调用,就其实就是一种递归
原型链
这个说起来其实挺困难,理解起来很绕,大概说一下,我们在创建function的时候,是会有一个 protoType,这个叫做显示原型,一开始听可能会有点绕,我尽量解释清楚
只要我们创建一个函数,该函数就会自动获得一个prototype属性,这个属性指向函数的原型对象,该属性是一个对象即该函数的原型对象,我们可以看到原型对象默认会有一个constructor属性,该属性是指向函数自身即fn。
参考CSDN:https://blog.csdn.net/u013356907/article/details/78858557
先吃饭
后续,我在完善