闭包定时器BOM

下面的代码输出多少?修改代码让 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);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 题目1: 下面的代码输出多少?修改代码让 fnArri 输出 i。使用 两种以上的方法 方法一: 方法二: 方法三...
    南山码农阅读 276评论 0 1
  • 题目1: 下面的代码输出多少?修改代码让 fnArri 输出 i。使用 两种以上的方法 输出10 修改为1var ...
    我是一只_鱼阅读 205评论 0 1
  • 题目1: 下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用 两种以上的方法 var fnArr...
    saintkl阅读 348评论 0 0
  • 1、下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用两种以上的方法。 方法一: 方法二: 方法...
    Jeff12138阅读 82评论 0 0
  • 题目1: 下面的代码输出多少?修改代码让fnArri 输出 i。使用两种以上的方法 题目2: 封装一个汽车对象,可...
    漂于行阅读 324评论 0 0