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

1:下面的代碼輸出多少?修改代碼讓fnArr[i]() 輸出 i。使用兩種以上的方法

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

答:

//方法一: 加入一個(gè)立刻執(zhí)行函數(shù) 會(huì)生成10個(gè)閉包,
        var fnArr = [];
        for(var i=0; i<10; i++){
            (function(n){
              //var n = n;  
                fnArr[i] = function(){
                    return n;
                };
            })(i)
        }
        console.log( fnArr[3]() );

     //方法二: 加入一個(gè)立刻執(zhí)行函數(shù) 會(huì)生成10個(gè)閉包,
        var fnArr = [];
        for(var i=0; i<10; i++){
            (function(){
                var n = i;  
                fnArr[i] = function(){
                    return n;
                };
            })()
        }
        console.log( fnArr[3]() );   

 //方法三: 加入一個(gè)立刻執(zhí)行函數(shù) 會(huì)生成10個(gè)閉包,
        var fnArr = [];
        for(var i=0; i<10; i++){
            fnArr[i] = (function(){
                var n = i;
                return function(){
                    return n;
                }
            })();   
            
        }
        console.log( fnArr[3]() );

2:封裝一個(gè)汽車對(duì)象,可以通過(guò)如下方式獲取汽車狀態(tài)

var Car = (function(){
   var speed = 0;
   function setSpeed(s){
       speed = s
   }
   ...
   return {
      setSpeed: setSpeed,
      ...
   }
})()
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 Car = (function(){
         var speed = 0;
         function setSpeed(s){
          speed = s
         }
         function getSpeed(){
          console.log(speed);
         }
         function accelerate(){
          speed += 10;
         }
         function decelerate(){
          speed -= 10;
         }
         function getStatus(){
          if(speed > 0) {
            console.log('running');
          }else{
            speed = 'error';
            console.log('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: 下面這段代碼輸出結(jié)果是? 為什么?

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);

答:結(jié)果是1,3,2

  • 經(jīng)過(guò)變量提升,第一個(gè)輸出的為1,第二個(gè)輸出為3
  • setTimeout(code|function,millisec)會(huì)放在執(zhí)行代碼隊(duì)列的最后面,最后輸出為2

4:下面這段代碼輸出結(jié)果是? 為什么?

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

答:結(jié)果是一直不停循環(huán)直到瀏覽器崩潰

  • while(flag=true) {}會(huì)一直運(yùn)行,而setTimeout(code|function,millisec)會(huì)放在執(zhí)行代碼隊(duì)列的最后面,所以flag一直都是true

5: 下面這段代碼輸出?如何輸出delayer: 0, delayer:1...(使用閉包來(lái)實(shí)現(xiàn))

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

答:

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

6:如何獲取元素的真實(shí)寬高

答:

 <head>
     <meta charset="utf-8">
     <style type="text/css">
         .box {
             width: 200px;
             height: 200px;
             background-color: pink;
             margin: 100px auto;
         }
     </style>
</head>
<body>
    <div class="box"></div>
    <script type="text/javascript">
        var box = document.querySelector('.box');
        console.log(getComputedStyle(box,null)['margin']);
    </script>
</body>

7:URL 如何編碼解碼?為什么要編碼?

JavaScript提供四個(gè)URL的編碼/解碼方法。
  • decodeURI() //解碼
  • decodeURIComponent() //解碼
  • encodeURI() //編碼
  • encodeURIComponent() //編碼
區(qū)別

encodeURI方法不會(huì)對(duì)下列字符編碼

  1. ASCII字母
  2. 數(shù)字
  3. ~!@#$&*()=:/,;?+'
    encodeURIComponent方法不會(huì)對(duì)下列字符編碼
  4. ASCII字母
  5. 數(shù)字
  6. ~!*()'
    所以encodeURIComponent比encodeURI編碼的范圍更大。

當(dāng)我們需要編碼一個(gè)URL并且要使用的時(shí)候,使用encodeURI來(lái)編碼。當(dāng)需要編碼URL中的參數(shù)時(shí),用encodeURIComponent,因?yàn)楹竺娴?是需要編碼的。
點(diǎn)我

8:補(bǔ)全如下函數(shù),判斷用戶的瀏覽器類型

function isAndroid(){
}
funcnction isIphone(){
}
function isIpad(){
}
function isIOS(){
}

答:

  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);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 var fnArr...
    saintkl閱讀 436評(píng)論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 方法一: 方法二: 方法三...
    南山碼農(nóng)閱讀 343評(píng)論 0 1
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 輸出10 修改為1var ...
    我是一只_魚(yú)閱讀 271評(píng)論 0 1
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 題目2: 封裝一個(gè)...
    peaceChierdo閱讀 308評(píng)論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 題目2: 封裝一個(gè)...
    QQQQQCY閱讀 336評(píng)論 0 0

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