共计 1254 个字符,预计需要花费 4 分钟才能阅读完成。
接着我之前写的一篇有关前端面试题的总结,分享几道比较经典的题目:
第一题:
考点:作用域,运算符
1.console.log((inner.func,inner.func)())
栗子:
var i=1,k=1;
console.log((i++,k++)) //i,k 都会进行运算,但是最后之后输出最后一个也就是 k.
* 那么 (inner.fun,inner.func) 其实就是 inner.func, 而且是个匿名函数,也就是属于 window,就输出 25
第二和第三个都是类似的,而且作用域是 inner, 都是输出 20 最后一个:(inner.fun=inner.func)其实就是 inner.func, 而且是个匿名函数,也就是属于 window,就输出 25
第二题
首先 ”a” in window 是返回 true, 因为 ”a” 是始终存在 window 的,在外面加个!判断是否存在,很明显 a 永远在 window 里存在,所有输出 undefined
第三题
大家忘记的可以去普及一下,call,apply 方法的用法以及适用场景,两个方法都是为了改变 this 指向,如果第一个参数传入的对象调用者是 null 或者 undefined 的话,call 方法将把全局对象(也就是 window)作为 this 的值。所以,不管你什么时候传入 null,其 this 都是全局对象 window. 则返回[object window]
第四题
这里实际执行的是 a[b.toString()] = 123,当你在同一个 key 赋值,那么后者会覆盖前者,所以输出 456
第五题
doFun1(obj.logName),obj.logName 作为参数传入,最后执行(obj.logName)(), 匿名函数,this 指向 window, 所以输出 ”HanMeiMei”,doFun2(obj),obj 作为参数传入,最后执行 obj.logName(), 作用是 obj,则输出 LiLei
第六题
这里可能很多人一看就觉得是输出 1,2,3,4,错误×,这里其实 for 循环被放入主线程会先被执行,最后才会去走定时器里面的方法,当输出的时候 i 就已经是 5 了,而且是 1s 输出一次,所以是 5,5,5,5。
如果要输出 1,2,3,4,只需把 var 改成 let,let 是 ES6 的语法,是在括号的才能使用,别处不行
第七题:什么是闭包,有什么优缺点(重点)
第八题:什么是原型链(重点)
第九题
有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
考点:递归算法题目其实挺有意思,最主要是我们先要找规律
月 1 2 3 4 5
每月对应数量 1 1 1+1 1+1+1 1+1+1+1+1 前两个数加起来就是后一个规律找到了,所以这么写就对了
function fib(n) {
if (n == 1 || n == 2) {
return 1;
} else {
return fib(n – 1) + fib(n – 2);
}
}
fib(100)// 随你自己赋值了
总结:就写到这吧,打的手疼。有什么不懂得,大家可以一起在评论下讨论,我知无不言。(*~︶~)