美文网首页
闭包_定时器_BOM

闭包_定时器_BOM

作者: 萧雪圣 | 来源:发表于2017-04-24 21:50 被阅读9次

    题目1: 下面的代码输出多少?修改代码让fnArr[i]() 输出 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 ++) {
          !function(){
            var n = i;
            fnArr[i] =  function(){
                return n;
            }
         }();
        }
        console.log( fnArr[3]() );
    
    方法二:
    var fnArr = [];
        for (var i = 0; i < 10; i ++) {
            fnArr[i] =  (function(n){
                return function(){
                     return n;
                }
            })(i);
        }
        console.log( fnArr[3]() );
    

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

    var Car = (function(){
       var speed = 0;
       function setSpeed(s){
           speed = s;
       }
      function getSpeed(){
           return speed;
       }
      function accelerate(){
          speed += 10;
       }
      function decelerate(){
          speed -= 10;
       }
      function getStatus(){
         return speed>0 ? '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);
    }, 0);
    var a ;
    console.log(a);
    a = 3;
    console.log(a);
    依次输出:
    1
    3
    2
    // setTimeout里面的代码会页面中其他代码执行完后在进行执行输出,所以按顺序输出 1 3 2;
    

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

    var flag = true;
    setTimeout(function(){
        flag = false;
    },0)
    while(flag){}
    console.log(flag);
    // 没有输出结果,因为setTimeout内的代码会放在最后执行,所以whlie(flag)永远是ture,代码进入无限死循环
    

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

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

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

    function getStyle(elment,pro){  // 元素,伪类
         // IE兼容写法
         return element.currentStyle ? element.currentStyle : window.getComputedStyle(elment, pro);
    }
    var elementWidth = getStyle(elment).width;
    var elementHeight = getStyle(elment).height;
    

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

    javaScript提供四个URL的编码/解码方法:

    • decodeURL(),
    • decodeURLComponent(),
    • encodeURL(),
    • encodeURLComponent(),
    • 对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。

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

    function isAndroid(){
        return /android/i.test(navigator.userAgent);
    }
    funcnction isIphone(){
        return /iphone/i.test(navigator.userAgent);
    }
    function isIpad(){
        return /ipad/i.test(navigator.userAgent);
    }
    function isIOS(){
        return /ios/i.test(navigator.userAgent);
    }
    

    相关文章

      网友评论

          本文标题:闭包_定时器_BOM

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