Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

高三精读小组课后作业(03期) #15

Open
VaJoy opened this issue Jan 9, 2016 · 1 comment
Open

高三精读小组课后作业(03期) #15

VaJoy opened this issue Jan 9, 2016 · 1 comment

Comments

@VaJoy
Copy link
Member

VaJoy commented Jan 9, 2016

#175-246页

答案将于一周后更新于本贴,大家可以跟帖写答案看自己对基础知识的掌握程度如何。
跟帖回答案的都应自行思考完成,不然没有任何意义

1. 说出下述代码的结果,并说说为什么:

    f = function(){
        return true
    };
    g = function(){
        return false
    };
    (function(){
      if(g() && []==![]){
          f = function(){
              return false
          };
          function g(){
              return true
          }
      }
    })();
    alert(f()); //true or false?

2.请定义一个函数repeat:

function repeat (func, nums, times) {
      //TODO: 完成该函数
}
//该函数可以这么使用:
var a = repeat(alert, 6, 3000);
a("你好");  //alert六次 "你好", 每次间隔3秒

3.听说过斐波那契数列吗?很多笔试题上都会出现它的哦。

斐波那契数列又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、…
它有这样的一个递归关系:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
那么请你用js写一个递归函数,打印出一串斐波那契数列吧:

function fibonacci(n){
   //TODO: 完成该函数
}
var r1 = fibonacci(2);
var r2 = fibonacci(6);

console.log(r1); //0,1,1
console.log(r2); //0,1,1,2,3,5,8

4.请写一个函数,让它能正确返回浏览器视口(viewport)宽度和高度:

function getVpSize(){
    //TODO: 完成该函数
}
var vpSize = getVpSize();
console.log( vpSize .width, vpSize .height );  //能正确打印出视口宽高

5.完成一个跨窗口的DOM操作

在一个页面(比如a.html)中打开一个新窗口b.html(如果被浏览器阻止,请设置浏览器不要拦截它,然后再刷新页面,即确保能正常打开新窗口),然后在a.html中通过脚本修改新开页面b.html中的div背景颜色为红色。(写出a.html页面的实现脚本即可)
b.html示例代码:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>b页面</title>
</head>
<body>
<div>123</div>
</body>
</html>

提示:建议把俩页面放到服务器上_(比如tomcat)_,否则在chrome上会被当作跨域页面被禁止俩页面间的操作。
另外打开新的b页面后,需等b页面的body onload后,a页面才能找到b页面的div

@Yoomin233
Copy link

1
应该alert出false, 因为function g在第七行开始的匿名函数中被提升了, 导致if()表达式中的两个式子值都为true.
2

function repeat(func, nums, times){
    return function(argv){
        setTimeout(function lambda(){
           func(argv);
           if(nums--)setTimeout(lambda, times)
        }, 0)
    }
}

3

function fibonacci(len){
    var arr = [0, 1];
    for(var i = 2; i < len; i ++){
        arr[i] = arr[i-1] + arr[i-2];
    }
    return arr;
}

呆尾递归优化的递归版本:

function fibonacci(len){
    var arr = [0, 1], index = 1;
    return (function loop(arr, elem1, elem2){
        arr.push(elem1 + elem2);
        if(index++ < len){
            loop(arr, arr[index-1], arr[index])
        }
        return arr;
    })(arr, 0, 1);
}

4
现在好像都是直接用innerHeightinnerWidth了...
5
现在好像都是用postMessage...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants