进阶任务11

题目1: 下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用 两种以上的方法

  var fnArr = [];
    for (var i = 0; i < 10; i ++) {
        fnArr[i] =  function(){
            return i;
        };
    }
    console.log( fnArr[3]() );  //10

使用新的函数,创建独立作用域

var fnArr = [];
 for (var i=0;i<10;i++) {
var temp = function(j) {
   fnArr[j]= function(){
      return j;
   };
}
  temp(i) 
}
console.log(fnArr[4]());

使用立即执行函数,创建独立作用域

  var fnArr = [];
    for (var i = 0; i < 10; i ++) {
        fnArr[i] =  function(i){
            return function() {
              return i;
            }
        }(i);
    }
    console.log( fnArr[3]() );  

题目2: 封装一个汽车对象,可以通过如下方式获取汽车状态

var Car = (function(){
   var speed = 0;
   function setSpeed(s){
       speed = s
   }
   function getSpeed() {
       return speed
   }
   function accelerate() {
       return speed+=10
   }
   function decelerate() {
       if (speed < 10) {
           return speed = 0
       }else{
           return speed-=10
       }
   }
   function getStatus() {
       if (speed == 0) {
           return "stop"
       }else{
           return "running"
       }
   }
   return {
      setSpeed: setSpeed,
      getSpeed: getSpeed,
      accelerate: accelerate,
      decelerate: decelerate,
      getStatus: getStatus
   }
})()
Car.setSpeed(30);
Car.getSpeed(); //30
Car.accelerate();
Car.getSpeed(); //40;
Car.decelerate();
Car.decelerate();
Car.getSpeed(); //20
Car.getStatus(); // 'running';
Car.decelerate(); 
Car.decelerate();
Car.getStatus();  //'stop';
//Car.speed;  //error

3. 下面这段代码输出结果是? 为什么?

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
//依次输出1 3 2 
//setTimeout异步处理,结果最后输出

题目4:下面这段代码输出结果是? 为什么?

var flag = true;
setTimeout(function(){
    flag = false;
},0)
while(flag){}
console.log(flag);
//这是个坑啊,网页已崩溃,因为setTimeout异步处理,最后输出结果,所以while(flag){}会一直运行,直至网页崩溃。

题目5: 下面这段代码输出?如何输出delayer: 0, delayer:1...(使用闭包来实现)

for(var i=0;i<5;i++){
     !function(i) {
    setTimeout(function(){
            console.log('delayer:' + i );
    }, 0);
}(i)
    console.log(i);
}

题目6: 如何获取元素的真实宽高

  • clientHeight和clientWidth用于描述元素内尺寸,是指 元素内容+内边距 大小,不包括边框(IE下实际包括)、外边距、滚动条部分

  • offsetHeight和offsetWidth用于描述元素外尺寸,是指 元素内容+内边距+边框,不包括外边距和滚动条部分

题目7: URL 如何编码解码?为什么要编码?

一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址"http://www.abc.com",但是没有希腊字母的网址"http://www.aβγ.com"(读作阿尔法-贝塔-伽玛.com)。这是因为网络标准RFC 1738做了硬性规定:"只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*'(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。"这意味着,如果URL中有汉字,就必须编码后使用。
使用escape,encodeURI()或者encodeURIComponent()进行编码;对应使用unescape,decodeURI()或者decodeURIComponent()进行解码。

题目8: 补全如下函数,判断用户的浏览器类型

function isAndroid(){
    return /Android/.test(navigator.userAgent)
}
funcnction isIphone(){
    return /Iphone/.test(navigator.userAgent)
}
function isIpad(){
    return /Ipad/.test(navigator.userAgent)
}
function isIOS(){
    return /IOS/.test(navigator.userAgent)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目1:下面的代码输出多少?修改代码让fnArri 输出 i。使用两种以上的方法
    暂时没有好名字阅读 163评论 0 0
  • 1- 算出代码的输出值;修改代码让 fnArri 输出 i 结果:输出 10,因为循环的时候 fnArr[i] =...
    osborne阅读 155评论 0 0
  • 题目1: 输出10 题目2 题目3 输出1,3,2定时器中的函数会被自动放到队尾执行,所以会先依顺序输出1和3,再...
    nicole914阅读 154评论 0 0
  • 做android开发最揪心的就是遇到OOM,为什么呢?因为它不是在编译期就报异常,是在运行期才报异常,而且它是积累...
    Stephen__Li阅读 636评论 0 3
  • 母亲常说,她在梦中遇见了红舅,红舅哭着向她求救。 红舅比母亲小四岁左右,中间本来还隔着一位阿姨,可是她幼年...
    叔丙仄阅读 568评论 2 1