这周开始想不定期更新一个新板块,就是把平时开发或者听到的有趣的面试题汇总起来,这周听到组里一前端同事面试中遇到了几个有趣的问题先行更新下:
1.div居中,内部文字左对齐
光看标题无法理解这题目的意思,详细描述一下的该题:
一个div容器,里面的字体少了居中,多了的话够一行的沾满一行,剩下的靠左,以下是图示:
1 | | xxx | |
主要思路其实就是2个容器,子容器设置为inline-block,并且内容居左,父容器居中,以下是代码实现:
1 | .container { |
2.普通函数和剪头函数的区别
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
普通函数:
1 | function foo2() { |
箭头函数:
1 | function foo1() { |
(2)箭头函数不会创建自己的this,而是默认绑定函数的宿主对象(或者绑定函数的对象)
箭头函数里面根本没有自己的this,而是引用外层的this
1 | function foo() { |
上面代码之中,只有一个this,就是函数foo的this,所以t1、t2、t3都输出同样的结果。因为所有的内层函数都是箭头函数,都没有自己的this,它们的this其实都是最外层foo函数的this。
(3)如果有对象嵌套的情况,则this绑定到最近的一层对象上
(4)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(5)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(6)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
(7)除了this,以下三个变量在箭头函数之中也是不存在的,指向外层函数的对应变量:arguments、super、new.target
1 | function foo() { |
上面代码中,箭头函数内部的变量arguments,其实是函数foo的arguments变量。
(8) 无法使用bind、call、apply改变指向
1 | (function() { |
3.尾递归
这个我准备写一个单独的文章:
4.react组件多继承
(1)Mixins
(2)HOC
5.git revert
(1)revert 详解
git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交。
1 | git revert HEAD # 撤销前一次 commit |
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,
版本会递增,不影响之前提交的内容
(2)git revert 和 git reset的区别
[1] git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
[2] 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
[3] git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。