闭包_定时器_BOM

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

方法一:

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

方法二:

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

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

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

//setTimeout是异步,会在同步任务执行结束后再执行,
//而因为 flag = true,所以while函数会一直执行,所以也不会输出console.log(flag)

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

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

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

通过getComputedStyle来获取,getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象。

window.getComputedStyle(node).height/width

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

JavaScript提供四个URL的编码/解码方法。

  • decodeURI()
  • decodeURIComponent()
  • encodeURI()
  • encodeURIComponent()

区别

  • encodeURI方法不会对下列字符编码
    • ASCII字母
    • 数字
    • ~!@#$&*()=:/,;?+'
  • encodeURIComponent方法不会对下列字符编码
    • ASCII字母
    • 数字
    • ~!*()'

因为有时可能需要对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 /(iPad)|(iPhone)/i.test(navigator.userAgent)
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目1: 下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用 两种以上的方法 var fnArr...
    saintkl阅读 377评论 0 0
  • 题目1: 下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用 两种以上的方法 题目2: 封装一个...
    peaceChierdo阅读 248评论 0 0
  • 1: 下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用 两种以上的方法 方法1:声明个函数,创...
    晓风残月1994阅读 388评论 0 0
  • 题目1: 下面的代码输出多少?修改代码让 fnArri 输出 i。使用 两种以上的方法 方法一: 方法二: 方法三...
    南山码农阅读 290评论 0 1
  • 题目1: 下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用 两种以上的方法 题目2: 封装一个...
    Taaaaaaaurus阅读 354评论 0 0