閉包-定時(shí)器-BOM

1.下面的代碼輸出多少?修改代碼讓fnArr[i]()輸出i。使用兩種以上的方法
  var fnArr = [];
  for(var i = 0; i < 10; i ++){
    fnArr[i] = function(){
      return i;
    };
  }
  console.log (fnArr[3]());

輸出結(jié)果為10

 第一種方法,使用立即執(zhí)行函數(shù)
  var fnArr = [];
  for(var i = 0; i < 10; i ++){
    !function(i){
      fnArr[i] = function(){
      return i;
    }
    }(i);
  }
  console.log (fnArr[3]());
 第二種方法 使用立即執(zhí)行函數(shù)return出新的函數(shù)
  var fnArr = [];
  for(var i = 0; i < 10; i ++){
    fnArr[i] = function(i){
      return function(){
        return i;
      }
    }(i);
  }
  console.log (fnArr[3]());  

注意:將var替換成es6中l(wèi)et 也可以實(shí)現(xiàn)

2.封裝一個(gè)汽車對(duì)象,可以通過如下方式獲取汽車狀態(tài)
  var Car = (function(){
    var speed = 0;
    function setSpeed(s){
      speed = s;
    }
    function getSpeed(){
      return speed;
    }
    function accelerate(){
      speed += 10;
    }
    function decelerate(){
      speed > 0 ? speed -= 10 : speed = 0
    }
    function getStatus(){
     speed > 0 ? return "running" : return "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);

遇到setTimeout代碼就最后執(zhí)行,先執(zhí)行下面代碼,輸出結(jié)果 1 3 2

4.下面這段代碼輸出是什么?為什么
  var flag = true;
  setTimeout(function(){
    flag = false;
  },0);
  while(flag){}  //死循環(huán)
  console.log(flag);

遇到setTimeout代碼就最后執(zhí)行,然后執(zhí)行while循環(huán),flag為true,就會(huì)一直循環(huán),成為死循環(huán),后面代碼就不執(zhí)行了,所以不會(huì)輸出結(jié)果

5.下面這段代碼輸出?如何輸出delayer: 0,delayer:1...(使用閉包來實(shí)現(xiàn))
  for(var i = 0; i < 5; i ++){
    setTimeout(function(){
      console.log('delayer:'+i);
    },0);
    console.log(i);
  }

輸出結(jié)果 0 1 2 3 4 delayer:5(輸出5次)

  使用閉包實(shí)現(xiàn)
  for(var i = 0; i < 5; i ++){
    setTimeout(!function(i){
      console.log('delayer:'+i);
    }(i),0);
    console.log(i);
  }
6.如何獲取元素的真實(shí)高度
  var div = document.querySeletor('div')
  window.getcomputedStyle(div).height  //高度
  window.getcomputedStyle(div).width   //寬度
  //低版本IE支持element.currentStyle
7.URL如何編碼解碼?為什么要編碼?

encodeURI()是用來對(duì)URL編碼的函數(shù)。它對(duì)整個(gè)URL編碼,除了常見的符號(hào)以外,對(duì)具有特殊含義的符號(hào);/?:@&=+$,#不進(jìn)行編碼,編碼后,輸出符號(hào)的utf-8形式,并且每個(gè)字節(jié)前面加上%。
解碼函數(shù)是decodeURI()

  encodeURI("\u00a9")   // %C2%A9
  decodeURI("%C2%A9")   //?

注意:不對(duì)單引號(hào)'編碼。
encodeURIComponent()編碼函數(shù)對(duì)URL組成部分進(jìn)行個(gè)別編碼,不用于對(duì)整個(gè)URL編碼。對(duì)于;/?:@&=+$,#特殊含義符號(hào)都會(huì)編碼。
解碼函數(shù)decodeURIComponent()

  encodeURIComponent("mail@example.com")  //main%40example.com

之所以要編碼,是因?yàn)橛行┳址麜?huì)引起歧義,就會(huì)造成URL服務(wù)器的解析錯(cuò)誤,所以必須將引起歧義的字符進(jìn)行編碼。

8.補(bǔ)全如下函數(shù),判斷用戶的瀏覽器類型
  function isAndroid(){
    return /android/i.test(navgator.userAgent);
  }
  function isIphone(){
    return /iphone/i.test(navgator.userAgent);
  }
  function isIpad(){
    return /ipad/i.test(navgator.userAgent);
  }
  function isIOS(){
    return /(iphone|ipad)/i.test(navgator.userAgent);
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 輸出結(jié)果為10,因?yàn)閞etur...
    DeeJay_Y閱讀 382評(píng)論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 輸出10 修改為1var ...
    我是一只_魚閱讀 268評(píng)論 0 1
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 方法一: 方法二: 方法三...
    南山碼農(nóng)閱讀 340評(píng)論 0 1
  • 1、下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 方法一:閉包 方法二:和方法一差...
    zh_yang閱讀 389評(píng)論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 var fnArr...
    saintkl閱讀 433評(píng)論 0 0

友情鏈接更多精彩內(nèi)容