进阶11作业

题目1: 下面的代码输出多少?修改代码让 fnArri 输出 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++) {
      (function(num) {
         fnArr[num] = function() {
            return num;
        }
      })(i)
    }
    console.log(fnArr[3]()) // 
    // 方法二
     var fnArr = [];
    for(var i = 0; i < 10; i++) { 
        var t = function(num) {
          return function() {
            return num;
          }
        }
         fnArr[i] = t(i)
        }
    console.log(fnArr[3]()) // 
题目2: 封装一个汽车对象,可以通过如下方式获取汽车状态
var Car = (function() {
   var speed = 0;
   function setSpeed(s){
       speed = s
   }

   function getSpeed() {
    console.log(speed);
   }

   function accelerate() {
      speed += 10;
   }
   function decelerate() {
      speed -= 10;
   }
   function getStatus() {
      if(speed > 0) {
        console.log('running');
      } else {
        console.log('stop');
      }
   }
   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); // C
a = 3;
console.log(a); // D

输出结果为 1 3 2
理由 C 和 D代码先执行,虽然设置的是0秒之后执行,但是实际上比0秒多的时间之后执行。

题目4:下面这段代码输出结果是? 为什么?
var flag = true;
setTimeout(function(){
    flag = false;
},0)
 while(flag){}
console.log(flag);

什么都不会输出,因为while(flag){} flag为true的时候,是一个死循环。会一直执行{}这个里面的语句。

题目5: 下面这段代码输出?如何输出delayer: 0, delayer:1...(使用闭包来实现)
 for(var i=0;i<5;i++){
    setTimeout(function(){
    console.log('delayer:' + i );
  }, 0);
    console.log(i);
 }

输出的结果为 0 1 2 3 4
delayer: 5
delayer: 5
delayer: 5
delayer: 5
delayer: 5

for(var i = 0; i < 5; i++) {
  (function(i) {
    return setTimeout(function() {
        console.log('delayer:' + i);
    }, 0);
  })(i)
console.log(i);
}
题目6: 如何获取元素的真实宽高

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

编码encodeURIComponent('你好'); // "%E4%BD%A0%E5%A5%BD"

解码decodeuRIComponent('%E4%BD%A0%E5%A5%BD') // "你好"

应为浏览器地址不允许存在中文。

题目8: 补全如下函数,判断用户的浏览器类型
function isAndroid(){
}
function isIphone(){
}
function isIpad(){
}
function isIOS(){
}
var browser = {
  versions: function() {
    var u = navigator.userAgent;
    function isAndroid() {
      console.log( u.indexOf('Android') > -1);
    }

    function isIphone() {
      console.log(u.indexOf('iphone') > -1);
    }

    function isIpad() {
      console.log(u.indexOf('iPad') > -1);
    }

    function isIOS() {
      console.log(!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) > -1); 
    }
    return {
      isAndroid: isAndroid,
      isIphone: isIphone,
      isIpad: isIpad,
      isIOS: isIOS,
    }
  }()
}
browser.versions.isIphone();

你可能感兴趣的:(进阶11作业)