美文网首页
闭包定时器BOM

闭包定时器BOM

作者: 小囧兔 | 来源:发表于2017-06-18 18:10 被阅读0次

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

var fnArr = [];
    for (var i = 0; i < 10; i ++) {
        fnArr[i] =  function(){
            return i;
        };
    }
    console.log( fnArr[3]() );  //
1.
 var fnArr = [];
    for (var i = 0; i < 10; i ++) {
        fnArr[i] = (function(j){
            return function (){
                return j;
            };
        })(i);
    }
    console.log( fnArr[3]() );  //3
2.
  var fnArr = [];
    for (var i = 0; i < 10; i ++) {
        fnArr[i] = (function (){
                var a=i;
             return function (){
                return a;
            };
        })(i)
    }
    console.log( fnArr[3]() );  //3
3.
  var fnArr = [];
  for (var i = 0; i < 10; i++) {
      (fnArr[i] = function () {
          return arguments.callee.x;
      }).x = i; // 将x作为函数的一个属性
  }
  console.log( fnArr[3]() );//3

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

 var Car = (function(){
      var speed = 0;
      function setSpeed(s){
         return  speed = s
      }
      function getSpeed(){
          return speed;
      }
      function accelerate(s){
       return speed+=10;
      }
      function decelerate(s){
          if(speed>=10){
              return speed-=10;
          }
      }
      function getStatus(){
          if (speed>0){
              return "running";
          }else {
              return "stop";
          }
      }
      return {
          setSpeed: setSpeed,
          geSpeed:getSpeed,
          accelerate:accelerate,
          decelerate:decelerate,
          getStatus:getStatus
      }
  })();

  Car.setSpeed(30);
 console.log(Car.geSpeed()) ; //30
 Car.accelerate() ;
  console.log(Car.geSpeed());//40;
  Car.decelerate();
  Car.decelerate();
  console.log(Car.geSpeed());//20
  console.log(Car.getStatus()); // 'running';
  Car.decelerate();
  Car.decelerate();
  console.log(Car.getStatus());  //'stop';
  //Car.speed;  //error

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

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,再给a赋值3,覆盖了前面的1,最后执行定时器函数,里面的a=2覆盖了之前的a=3,所以输出2.

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

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

什么也没有输出,因为flag=true,while条件为true,while就无线循环,setTimeout()会等到别的程序执行完了之后才执行,所以,flag就一直是true,循环也就一直执行。

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

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

如何获取元素的真实宽高

    function getTrueStyle(elem,name){
        //如果行内样式设置了当前属性
            if(elem.style[name]){
                return elem.style[name];

            }else  if(window.getComputedStyle){
                var s=window.getComputedStyle(elem,name);
                 return s;
            }
            //兼容IE
            else if(elem.currentStyle){
                return elem.currentStyle;
            }else {
                return null;
            }
    }
   let elem = document.getElementById("elem-container");
   let hei=getTrueStyle(elem).height;
   let wid=getTrueStyle(elem).width;
   console.log(wid);
   console.log(hei);

预览

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

url只能是字母数字和一些标点符号($-_.+!*'(),)组成,所以如果url中有别的字符或者汉字,就必须编码后使用。
1.如果对整个URL进行编码,那么使用encodeURI(),encodeURI()是Javascript中真正用来对URL编码的函数,如果URI是完整的URI,那么无需对那些保留的并且在URI中有特殊意思的字符进行编码编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

  var url='http://www.jianshu.com/writer#/?a="简书"&b=2';
    var url1=encodeURI(url);
    console.log(url1);//http://www.jianshu.com/writer#/?a=%22%E7%AE%80%E4%B9%A6%22&b=2
    它对应的解码函数是decodeURI()。
    console.log(decodeURI(url1));//http://www.jianshu.com/writer#/?a="简书"&b=2

2.如果对URL的组成部分进行个别编码,使用encodeURIComponent()。
与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,但在encodeURIComponent()中统统会被编码,

var url='http://www.jianshu.com/writer#/?a="简书"&b=2';
console.log(encodeURIComponent(url));//http%3A%2F%2Fwww.jianshu.com%2Fwriter%23%2F%3Fa%3D%22%E7%AE%80%E4%B9%A6%22%26b%3D2
var url1=encodeURIComponent(url);
它对应的解码函数是decodeURIComponent(yrl1)//http://www.jianshu.com/writer#/?a="简书"&b=2


为什么要编码
因为URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,所以为了使服务器正确的解析url,就要使用编码的方式。不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果,所以使用Javascript先对URL编码,然后再向服务器提交,不给浏览器插手的机会。这样就保证了服务器得到的数据是格式统一的。

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

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);
    }

相关文章

  • 闭包_定时器_BOM

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

  • 闭包_定时器_BOM

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

  • 闭包-定时器-BOM

    1- 算出代码的输出值;修改代码让 fnArri 输出 i 结果:输出 10,因为循环的时候 fnArr[i] =...

  • 闭包_定时器_BOM

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

  • 闭包&&定时器&&BOM

    1、下面的代码输出多少?修改代码让 fnArri 输出 i。使用 两种以上的方法 方法一:闭包 方法二:和方法一差...

  • 闭包_定时器_BOM

    题目1: 下面的代码输出多少?修改代码让 fnArri 输出 i。使用 两种以上的方法 题目2: 封装一个汽车对象...

  • 闭包、定时器、BOM

    下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用 两种以上的方法 改造如下: 封装一个汽车对象...

  • 闭包_定时器_BOM

    1. 题目1: 下面的代码输出多少?修改代码让 fnArri 输出 i。使用两种以上的方法 2. 封装一个汽车对象...

  • 闭包、定时器、BOM

    1.下面的代码输出多少?修改代码让 fnArri 输出 i。使用 两种以上的方法 方法一 方法二: 方法三: 2....

  • 闭包-定时器-BOM

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

网友评论

      本文标题:闭包定时器BOM

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