閉包_定時器_BOM

1.下面的代碼輸出多少?修改代碼讓fnArri 輸出 i。使用兩種以上的方法

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

2.封裝一個汽車對象,可以通過如下方式獲取汽車狀態

<script>
    var Car = (function(){
       var speed = 0;
       function setSpeed(s){
           speed = s
       }

       function getSpeed () {
        return speed;
       }

       function accelerate () {
        return speed += 10;     
       }

       function decelerate () {
        return speed -= 10;     
       }

       function getStatus () {
        if (speed > 0) 
        {
            return 'running';
        }
        else
        {
            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
</script>

3.下面這段代碼輸出結果是? 為什么?

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
/*1
  3
  2*/    //定時器的執行隊列問題

4.下面這段代碼輸出結果是? 為什么?

var flag = true;
setTimeout(function(){
    flag = false;
},0)
while(flag){}
console.log(flag);
//死循環,setTimeout在代碼解釋完后的隊列中

5.下面這段代碼輸出?如何輸出delayer: 0, delayer:1...(使用閉包來實現)

for(var i=0;i<5;i++){
    setTimeout(function(){
         console.log('delayer:' + i );
    }, 0);
    console.log(i);
}
/*
0
1
2
3
4
5:delayer:5
*/
<script>
    for(var i=0;i<5;i++){
        (function () {
            var n = i;
            setTimeout(function(){
                console.log('delayer:' + n );
            }, 0);
        })()
        console.log(i);
    }
</script>

6.如何獲取元素的真實寬高

  • 主流瀏覽器:window.getComputesStyle
var style = window.getComputedStyle("元素", "偽類");
  • 低版本IE:element.currentStyle

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

  • decodeURI()
  • decodeURIComponent()
  • encodeURI()
  • encodeURIComponent()
    因為有些字符會引起歧義

8.補全如下函數,判斷用戶的瀏覽器類型

···
<script>
function isAndroid(){
return /Android/.test(navigator.userAgent);
}
function isIphone(){
return /iphone/.test(navigator.userAgent);
}
function isIpad(){
return /iPad/.test(navigator.userAgent);
}
function isIOS(){
return /(iPad)|(iPhone)/i.test(navigator.userAgent);
}
</script>
···

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 輸出10 修改為1var ...
    我是一只_魚閱讀 220評論 0 1
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 var fnArr...
    saintkl閱讀 377評論 0 0
  • 1. 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出i。使用兩種以上的方法。 修改一: var fnA...
    Rising_suns閱讀 139評論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓fnArri 輸出 i。使用兩種以上的方法 題目2: 封裝一個汽車對象,可...
    饑人谷_桶飯閱讀 400評論 0 0
  • 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i,使用 兩種以上的方法 封裝一個汽車對象,可以通過如下方式獲...
    LeeoZz閱讀 264評論 0 0