js考试试题有不明白的
来源:1-1 课程简介
weixin_慕的地2217823
2022-12-14 11:48:37
1回答
同学你好,解答如下:
1、第13题:涉及到预解析知识点。
1)getNum()这句代码,是调用全局中的getNum。那么就先看全局中,getNum相关内容:
getNum()执行时,Foo中的代码并没有执行,所以Foo中的内容不用考虑:
还可以进一步简化代码:
代码执行之前,先预解析,变量声明函数声明提前,赋值保留原地:
就相当于如下形式:
所以getNum的值是function () { console.log(4); },因此调用getNum会打印4。
2)继续分析 f.getNum(),该句代码是调用实例的getNum方法,与如下代码有关:
Foo内两个getNum,第一个是全局变量getNum,第二个是实例自身上的getNum:
Foo.prototype.getNum是实例原型上的getNum:
对于实例而言,调用getNum时,先找自身上的getNum,所以打印2。
2、第14题:涉及到作用域。
fn1、fn2的逻辑解释是一样的,以fn1为例,fn1就是out中,返回的函数inner:
调用out时,out会形成一个函数作用域,每调用一次out,就会形成一个新的作用域,该作用域中有一个变量num和一个函数inner:
调用fn1时,就相当于调用inner(inner在out形成的作用域中),由于inner会使用变量num,所以会沿着作用域查找num,即会找到out作用域中的num:
因此第一次调用fn1,num会加1,变成2。
第二次调用fn1,还是调用上图作用域中的inner,inner中会继续访问之前的num:
所以num会在2的基础上加1,变成3。所以两次调用fn1,会打印2、3。
fn2的过程同上:
3、第15题比较难,先分析一下兔子的对数:
第一个月1对,第二个月1对,第三个月它们生了1对,共2对。
第四个月又生1对,共3对。
第五个月,又生了1对,且第二对兔子已经长到第三个月,生了1对小兔子,共5对。
第六个月,第一对兔子生了1对,第二对生了1对,第三对兔子已经长到第三个月,也生了一对,共8对。
形成的数字规律如下:
1,1,2,3,5,8,13,21……(单位:对)
以上就是斐波拉契数列。
找一下数字中包含的数学规律:后面的一个数是它前面两个数之和。所以第n个月兔子的对数=第n-1个月的兔子对数 + 第n-2个月的兔子对数,即func(n - 1) + func(n - 2),本题答案为A。
祝学习愉快!
相似问题