美文网首页
闭包&定时器&BOM

闭包&定时器&BOM

作者: 饥人谷_akira | 来源:发表于2017-07-27 22:56 被阅读0次

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

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

    方法一:

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

    方法二:

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

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

    var Car = (function(){
    var speed = 0;
    
    function setSpeed(s){
      speed = s
    }
    
    function getSpeed() {
      console.log(speed)
    }
    
    function accelerate() { 
      speed += 10
    }
    
    function decelerate() {
      if (speed >= 10)
        speed -= 10
    }
    
    function getStatus() {
      console.log((speed ? 'running':'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);//2
    }, 0);
    var a ;
    console.log(a);//1
    a = 3;
    console.log(a);//3
    

    输出1,3,2,因为setTimeout()绑定的函数,是在队列最后面执行

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

    var flag = true;
    setTimeout(function(){
      flag = false;
    },0)
    while(flag){} //在这里死循环,因为setTimeout()在执行队列的最后面,还没有运行到
    console.log(flag);
    

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

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

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

      function getStyle(e,pseudoclass) { 
        return e.currentStyle ? e.currentStyle : window.getComputedStyle(e, pseudoclass)
      } // ie不兼容getComputedStyle()方法
      var box = document.querySelector('.box1') 
      console.log(getStyle(box,null).height)
    

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

    函数 编码范围
    encodeURI 不包含ASCII字母 数字 ~!@#$&*()=:/,;?+'
    encodeURIComponent 不包含ASCII字母 数字 ~!*()' 编码范围更大

    用法:
    如果需要编码整个URL,然后使用这个URL,那么用encodeURI
    如果需要编码URL中的参数的时候,那么使用encodeURIComponent

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

    function isAndroid(){
    console.log(/android/i.test(window.navigator.userAgent))
    }
    funcnction isIphone(){
    console.log(/iphone/i.test(window.navigator.userAgent))
    }
    function isIpad(){
    console.log(/ipad/i.test(window.navigator.userAgent))
    }
    function isIOS(){
    console.log(/(ipad)|(iphone)/i.test(window.navigator.userAgent))
    }
    

    相关文章

      网友评论

          本文标题:闭包&定时器&BOM

          本文链接:https://www.haomeiwen.com/subject/fjitlxtx.html