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

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

  • 題目中的代碼輸出10;
第一種方法:
var fnArr = [];
for(var i = 0;i<10;i++){
    fnArr[i] = (function(){
        var n = i;
        return function(){
            return n;
        }
    })();
}

第二種方法:
var fnArr = [];
for(var i = 0;i<10;i++){
    fnArr[i] = (function(n){
        return function(){
            return n
        }
    })(i);
}

第三種方法:
var fnArr = [];
for(var i = 0;i<10;i++){
    fnArr[i] = addFn(i);
    function addFn(n){
        return function(){
            return n;
        }
    }
}
第四種方法:
var fnArr = [];
for(var i = 0;i<10;i++){
    (function(n){
        fnArr[n] = function(){
            return n;
        }
    })(i);
}

第五種方法:(ES5語(yǔ)法)
var fnArr = [];
for(let i = 0;i<10;i++){
    fnArr[i] = function(){
        return i;
    };
}

題目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 -= 10;
    }
    function getStatus(){
        if(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: 下面這段代碼輸出結(jié)果是? 為什么?

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
  • 輸出順序?yàn)椋?/li>
1 //剛一開是a被聲明并賦值為1 
3 //a被賦值為3
2 //setTimeout的執(zhí)行放在隊(duì)尾,執(zhí)行完后a等于2

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

var flag = true;
setTimeout(function(){ // 等待所有任務(wù)結(jié)束后執(zhí)行
    flag = false;
},0)
while(flag){} //因?yàn)閒lag永遠(yuǎn)是true,循環(huán)會(huì)無限執(zhí)行下去
console.log(flag); //執(zhí)行不到這里

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

輸出的結(jié)果是:

0
1
2
3
4
delayer: 4
實(shí)現(xiàn)方法:
for(var i=0;i<5;i++){
    (function(n){
        return setTimeout(function(){
            console.log('delayer:'+n);
        },0)
    })(i);
    console.log(i);
}

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

<style>
.ct {
  width: 300px;
  height: 300px;
  background: red;
}
</style>
  <div class="ct"></div>
<script>
var ct = document.querySelector(".ct");
console.log(window.getComputedStyle(ct).width); // "300px"
console.log(window.getComputedStyle(ct).height); // "300px"
</script>

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

var myUrl = "https://www.nuomi.com/?cid=002540"
//如果我們想編碼一個(gè)URL并且可以使用它(訪問),使用encodeURI();
var simpleUrl = encodeURI(myUrl);
//如果我們想編碼一個(gè)URL并且可以將其放置在某URL的參數(shù)中,使用encodeURIComponent();
var complicateUrl = encodeURIComponent(muUrl);
對(duì)于Url來說,之所以要進(jìn)行編碼,是因?yàn)閁rl中有些字符會(huì)引起歧義。

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

function isAndroid(){
    return /Android/.test(navigator.userAgent);
}
funcnction isIphone(){
    return /iPhone/.test(navigator.userAgent);
}
function isIpad(){
    return /iPad/.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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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