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

闭包_定时器_BOM

作者: jamesXiao_ | 来源:发表于2017-06-14 20:19 被阅读0次

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

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

    var fnArr = [];
    for (var i = 0; i < 10; i ++) {
    !function(i){
    fnArr[i] = function(){
    return i;
    };
    }(i);
    };`

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

    
    #封装一个汽车对象,可以通过如下方式获取汽车状态
    
    >```
    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() {
        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
    

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

    var a = 1;
    setTimeout(function(){
    a = 2;
    console.log(a); //1
    }, 0);
    var a ;
    console.log(a); //2
    a = 3;
    console.log(a); //3
    输出1, 3, 2 js首先先会打印出第一个2个console.log(a),按照变量申明前置.得到a=1,然后再打印第3个console.log(a)...a=3
    最后再打印第一个console.log(a),得到a =2

    
    #下面这段代码输出结果是? 为什么?
    >```
    var flag = true;
    setTimeout(function(){
        flag = false;
    },0)
    while(flag){}
    console.log(flag);  输出true   因为setTimeout 会最后执行.所以flag=true
    

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

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

    
    #如何获取元素的真实宽高
    window.getComputedStyle(element, [pseudoElt]);
    使用getComputerStyle 获取元素的样式.再来获取到宽和高
    
    #URL 如何编码解码?为什么要编码?
    decodeURIComponent()
    encodeURIComponent()
    http协议传输的参数是以key-value键值对形式的,如果传递多个参数,用&对键值对进行分割,用=分割出参数值,但是如果传递的参数本身含有&,=时容易造成歧义。
    #补全如下函数,判断用户的浏览器类型
    >```
    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  /iPhone|iPad|iPod/i.test(navigator.userAgent);
    }
    

    相关文章

      网友评论

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

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