閉包_定時(shí)器_BOM

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

image.png

輸出10,因?yàn)閕是全局變量,經(jīng)過(guò)循環(huán)后,i=10

var fnArr = [];
for (var i = 0; i < 10; i++) {

//方法1:
(function(i) {
    fnArr[i] = function() {
        return i;
    }
})(i);
}
console.log(fnArr[4]());    //4

//方法2:
for (var i = 0; i < 10; i++) {

    fnArr[i] = (function(i) {
        return function() {
            return i;
        };
    })(i);
}
console.log(fnArr[4]());    //4

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

var Car = (function() {
var speed = 0;
var status = "";

function setSpeed(s) {
    speed = s
}

function getSpeed() {
    return speed;
}

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

function decelerate() {
    speed = speed - 10;
    if (speed < 0) {
        speed = 0;
    }
}

function getStatus() {
    if (speed > 0) {
        status = 'running';
    } else {
        status = 'stop';
    }
    return status;
}
return {
    setSpeed: setSpeed,
    getSpeed: getSpeed,
    accelerate: accelerate,
    decelerate: decelerate,
    getStatus: getStatus
}
})();


Car.setSpeed(30);
console.log(Car.getSpeed()); //30
Car.accelerate();
console.log(Car.getSpeed()); //40;
Car.decelerate();
Car.decelerate();
console.log(Car.getSpeed()); //20
console.log(Car.getStatus()); // 'running';
Car.decelerate();
Car.decelerate();
console.log(Car.getStatus()); //'stop';
//Car.speed;  //error

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

輸出1,3, 2

var a = 1;
setTimeout(function() {
    a = 2;
    //輸出2,回調(diào)函數(shù)執(zhí)行,此時(shí)a=2
    console.log(a);
}, 0);
var a;
//輸出1,比定時(shí)器的回調(diào)函數(shù)先執(zhí)行,此時(shí)a=1
console.log(a);
a = 3;
//輸出3,比定時(shí)器的回調(diào)函數(shù)先執(zhí)行,此時(shí)a=3
console.log(a);

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

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

沒(méi)有輸出,while進(jìn)入死循環(huán),循環(huán)一直不會(huì)結(jié)束, setTimeout的回調(diào)函數(shù)一直不執(zhí)行,阻塞了輸出語(yǔ)句的執(zhí)行。


題目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);
}

//輸出0~4,然后輸出5次delayer:5, 因?yàn)閕是全局變量,經(jīng)過(guò)循環(huán)后,i=5,回調(diào)函數(shù)打印i的值是5

修改:

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

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

var div = document.querySelector('.ct');
var w = getComputedStyle(div).width;
var h = getComputedStyle(div).height;
console.log(w,h);

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

編碼函數(shù):escape,encodeURI(),encodeURIComponent()
對(duì)應(yīng)的解碼函數(shù):unescape,decodeURI(),decodeURIComponent()

因?yàn)閁RL中有些字符會(huì)引起歧義,例如:=或&這種特殊字符,會(huì)造成URL傳遞過(guò)程中key和value的歧義,編碼后可以避免這種歧義的產(chǎn)生。還有在某些特定的應(yīng)用場(chǎng)景需要返回原頁(yè)面,可以把原來(lái)頁(yè)面的URL編碼后添加在新的頁(yè)面中,方便返回。


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

image.png
function isAndroid(){ 
  return /Android/.test(window.navigator.userAgent)
 }

function isIphone(){ 
    return /iPhone/.test(window.navigator.userAgent) 
}

function isIpad(){ 
    return /iPad/.test(window.navigator.userAgent) 
}

function isIos(){ 
    return /iPhone|iPad/.test(window.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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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