考点:做用域,运算符前端
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里存在,全部输出undefinedapp
你们忘记的能够去普及一下,call,apply方法的用法以及适用场景,两个方法都是为了改变this指向,若是第一个参数传入的对象调用者是null
或者undefined的话,call方法将把全局对象(也就是window)做为this的值。因此,无论你何时传入null,其this都是全局对象window.
则返回[object window]函数
这里实际执行的是a[b.toString()] = 123,当你在同一个key赋值,那么后者会覆盖前者,因此输出456this
doFun1(obj.logName),obj.logName做为参数传入,最后执行(obj.logName)(),匿名函数,this指向window,因此输出"HanMeiMei",
doFun2(obj),obj做为参数传入,最后执行obj.logName(),做用是obj,则输出LiLeispa
这里可能不少人一看就以为是输出1,2,3,4,错误×,
这里其实for循环被放入主线程会先被执行,最后才会去走定时器里面的方法,当输出的时候i就已是5了,并且是1s输出一次,因此是5,5,5,5。线程
若是要输出1,2,3,4,只需把var 改为let,let 是ES6的语法,是在括号的才能使用,别处不行code
有一对兔子,从出生后第三个月起每月都生一对兔子 ,小兔子长到第三个月后每月又生一对兔子,假如兔子都不死 ,问每月的兔子总数为多少?
考点:递归
算法题目其实挺有意思,最主要是咱们先要找规律
月 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)//随你本身赋值了
总结:就写到这吧,打的手疼。有什么不懂得,你们能够一块儿在评论下讨论,我知无不言。(* ̄︶ ̄)