前端基础类学习

闭包、定时器、BOM

2017-04-13  本文已影响21人  饥人谷_米弥轮

BOM课件
闭包概念1
闭包概念2

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

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

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

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

  var flag = true;
  setTimeout(function(){
      flag = false;
  },0)
  while(flag){}
  console.log(flag);

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

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

6.如何获取元素的真实宽高

 <head>
    <meta charset="utf-8">
    <style type="text/css">
      .box {
        width: 200px;
        height: 200px;
        background-color: pink;
        margin: 100px auto;
      }
    </style>
</head>
  <body>
    <div class="box"></div>
    <script type="text/javascript">
        var box = document.querySelector('.box');
        console.log(getComputedStyle(box,null)['margin']);
    </script>
  </body>

7.URL 如何编码解码?为什么要编码?

所以encodeURIComponent比encodeURI编码的范围更大。

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

  function isAndroid(){
     return /android/i.test(navigator.userAgent);
    }
    function isIphone(){
      return /iphone/i.test(navigator.userAgent);
    }
    function isIpad(){
      return /ipad/i.test(navigator.userAgent);
    }
    function isIOS(){
      return /(ipad)|(iphone)/i.test(navigator.userAgent);
    }
    function closure(){
      var str = "I'm a part variable.";
      return function(){
        alert(str);
      }
    }
    var fObj = closure();
    fObj();
上一篇 下一篇

猜你喜欢

热点阅读