閉包 定時(shí)器 BOM

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

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

  • 方法一
var fnArr=[]
        for(var i=0;i<10;i++){
            fnArr[i]=(function(j){
                return function(){
                    return j
                }
            })(i)
        }
        console.log(fnArr[4]()) //4 
  • 方法二
var fnArr=[]
        for (var i=0;i<10;i++){
            !function(i){
                fnArr[i]=function(){
                    return i
                }
            }(i)
        }
        console.log(fnArr[5]())//5

2. 封裝一個(gè)汽車(chē)對(duì)象,可以通過(guò)如下方式獲取汽車(chē)狀態(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

  • 解析的過(guò)程為:
var Car = (function(){
            var speed = 0;
            function setSpeed(s){
               speed = s
               return speed
            }
            function getSpeed(){
                return speed
            }
            function decelerate(){
                speed-=10
                return speed
            }
            function accelerate(){
                speed+=10
                return speed
            }
            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

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

var a = 1;
    setTimeout(function(){
             a = 2;
         console.log(a);//第三個(gè)
    }, 0);
         var a ;
         console.log(a);//第一個(gè)
         a = 3;
         console.log(a);//第二個(gè)
    // 1,3,2
    //即使setTimeout時(shí)間間隔為0.也會(huì)在整個(gè)代碼執(zhí)行完成之后再執(zhí)行

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

var flag = true;
    setTimeout(function(){
        flag = false;
    },0)
       while(flag){}
           console.log(flag);
    //沒(méi)有任何輸出
    //setTimeout會(huì)在整個(gè)代碼執(zhí)行完畢之后再執(zhí)行,
     但是由于flag始終為true,
     while函數(shù)會(huì)一直執(zhí)行下去,
      所以setTimeout不會(huì)執(zhí)行

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

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

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

var teat= document.querySelector(".test")
getComputedStyle(test,pse).width  //獲取元素的寬度,第二鴿參數(shù)為偽類(lèi),沒(méi)有則不設(shè)置
getComputedStyle(test,pse).height //獲取元素的寬度,第二鴿參數(shù)為偽類(lèi),沒(méi)有則不設(shè)置

//兼容低版本IE的方式
function tureStyle(element,pse){
    return element.currentStyle ?
    element.currentStyle:window.getComputedStyle(element,pse);
}
var trueWidth=tureStyle(element,pse).width
var trueHeight=tureStyle(element,pse).height

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

  • 編碼方式:
    encodeURI()
    encodeURIComponent()

  • 區(qū)別:
    encodeURI方法不會(huì)對(duì)下列字符編碼 ASCII字母、數(shù)字、~!@#$&*()=:/,;?+'
    encodeURIComponent方法不會(huì)對(duì)下列字符編碼ASCII字母、數(shù)字、~!*()'
    所以encodeURIComponentencodeURI編碼的范圍更大。

  • 解碼方式:
    decodeURI()
    decodeURIComponent()

  • 編碼原因:

對(duì)于Url來(lái)說(shuō),之所以要進(jìn)行編碼,是因?yàn)閁rl中有些字符會(huì)引起歧義。

比如說(shuō)“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么實(shí)際在傳輸過(guò)程中就會(huì)變成這樣“name1=va&lu=e1”。我們的本意是就只有一個(gè)鍵值對(duì),但是服務(wù)端會(huì)解析成兩個(gè)鍵值對(duì),這樣就產(chǎn)生了歧義。

又如,Url的編碼格式采用的是ASCII碼,而不是Unicode,這也就是說(shuō)你不能在Url中包含任何非ASCII字符,例如中文。否則如果客戶端瀏覽器和服務(wù)端瀏覽器支持的字符集不同的情況下,中文可能會(huì)造成問(wèn)題。

URL編碼的原則就是使用安全的字符(沒(méi)有特殊用途或者特殊意義的可打印字符)去表示那些不安全的字符.

預(yù)備知識(shí):URI是統(tǒng)一資源標(biāo)識(shí)的意思,通常我們所說(shuō)的URL只是URI的一種。下面提到的URL編碼,實(shí)際上應(yīng)該指的是URI編碼。

參考

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

function isAndroid(){
}
function 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 /iphone|ipad/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
  • 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i,使用 兩種以上的方法 封裝一個(gè)汽車(chē)對(duì)象,可以通過(guò)如下方式獲...
    LeeoZz閱讀 317評(píng)論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 輸出10 修改為1var ...
    我是一只_魚(yú)閱讀 269評(píng)論 0 1
  • 題目1: 下面的代碼輸出多少?修改代碼讓fnArri 輸出 i。使用兩種以上的方法 題目2: 封裝一個(gè)汽車(chē)對(duì)象,可...
    饑人谷_桶飯閱讀 432評(píng)論 0 0
  • 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 方法一:var fnArr = []...
    邵志遠(yuǎn)閱讀 244評(píng)論 0 0

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