任務(wù)11

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

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

輸出:10
方法1創(chuàng)建立即執(zhí)行函數(shù)

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

方法2

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

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

    var Car = (function(){
                var Car={
                   speed:0,
                setSpeed:function(s){
                 Car.speed=s;
                },
                getSpeed:function(){
                    console.log(Car.speed)
                    return Car.speed;
                },
                accelerate:function(){
                    Car.speed+=10;
                },
                decelerate:function(){
                    Car.speed-=10;
                    if(Car.speed<0){
                        Car.speed='eror'
                    }
                },
                getStatus:function(){
                    if(Car.speed>0){ 
                        console.log('running')
                        return 'running'
                    }else{
                        Car.speed='eror'
                        console.log('stop')
                        return 'stop'
                    }
                }
                
            };
            return Car;
            })()


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.decelerate();
Car.decelerate();
Car.getStatus();  //'stop';
    console.log(Car.speed);

題目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

setTimeout()是在頁(yè)面加載完瀏覽器再執(zhí)行的
所以setTimeout()的執(zhí)行結(jié)果在最后;
頁(yè)面開始加載,首先var a=1,下面再var a相當(dāng)于執(zhí)行了一行代碼內(nèi)容為a,所以a的值還是1,這時(shí)console.log(a)為1
往下執(zhí)行,a=3,所以console.log(a) 3

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

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

啥都不輸出,網(wǎng)頁(yè)會(huì)崩潰
因?yàn)?br> setTimeout(function(){
flag = false;
},0)是在頁(yè)面加載其它代碼加載執(zhí)行完再執(zhí)行的,
所以flag=true,while(flag){}會(huì)一直循環(huán),知道把所有的內(nèi)存都占用,然后網(wǎng)頁(yè)崩潰

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

for(var i=0;i<5;i++){
setTimeout(function(){
console.log('delayer:' + i );
}, 0);
console.log(i);
}
輸出的結(jié)果為 :0 1 2 3 4
delayer:5
delayer:5
delayer:5
delayer:5
delayer:5
如何輸出delayer: 0, delayer:1...(使用閉包來實(shí)現(xiàn)):

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

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

getComputedStyle是一個(gè)可以獲取當(dāng)前元素所有最終使用的CSS屬性值。返回的是一個(gè)CSS樣式聲明對(duì)象。獲得的style是頁(yè)面上css計(jì)算的最終結(jié)果,其中這個(gè)聲明對(duì)象包含height和width屬性,可以通過下面的方式獲得真實(shí)樣式,這個(gè)方法第二個(gè)參數(shù)代表偽類沒有則為null;

//window.getComputedStyle("元素", "偽類");
console.log(window.getComputedStyle(d1,null).width)
console.log(window.getComputedStyle(d1,null).height)

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

可用encodeURI()、encodeURIComponent()方法對(duì)url進(jìn)行編碼
encodeURI方法不會(huì)對(duì)下列字符編碼

ASCII字母
數(shù)字
~!@#$&*()=:/,;?+'
encodeURIComponent方法不會(huì)對(duì)下列字符編碼

ASCII字母
數(shù)字
~!*()'
所以encodeURIComponent比encodeURI編碼的范圍更大

解碼
用decodeURI()和decodeURIComponent()可以對(duì)編碼過的字符串進(jìn)行解碼
為什么要編碼?
我們都知道Http協(xié)議中參數(shù)的傳輸是"key=value"這種簡(jiǎn)直對(duì)形式的,如果要傳多個(gè)參數(shù)就需要用“&”符號(hào)對(duì)鍵值對(duì)進(jìn)行分割。如"?name1=value1&name2=value2",這樣在服務(wù)端在收到這種字符串的時(shí)候,會(huì)用“&”分割出每一個(gè)參數(shù),然后再用“=”來分割出參數(shù)值。
針對(duì)“name1=value1&name2=value2”我們來說一下客戶端到服務(wù)端的概念上解析過程:
上述字符串在計(jì)算機(jī)中用ASCII嗎表示為:
6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532。
6E616D6531:name1
3D:=
76616C756531:value1
26:&
6E616D6532:name2
3D:=
76616C756532:value2
服務(wù)端在接收到該數(shù)據(jù)后就可以遍歷該字節(jié)流,首先一個(gè)字節(jié)一個(gè)字節(jié)的吃,當(dāng)吃到3D這字節(jié)后,服務(wù)端就知道前面吃得字節(jié)表示一個(gè)key,再想后吃,如果遇到26,說明從剛才吃的3D到26子節(jié)之間的是上一個(gè)key的value,以此類推就可以解析出客戶端傳過來的參數(shù)。

現(xiàn)在有這樣一個(gè)問題,如果我的參數(shù)值中就包含=或&這種特殊字符的時(shí)候該怎么辦。
比如說“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么實(shí)際在傳輸過程中就會(huì)變成這樣“name1=va&lu=e1”。我們的本意是就只有一個(gè)鍵值對(duì),但是服務(wù)端會(huì)解析成兩個(gè)鍵值對(duì),這樣就產(chǎn)生了歧義。
還有就是中文等其他非英文字符也無法出現(xiàn)在url上所以要進(jìn)行編碼

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

    var a=window.navigator.userAgent
    function isAndroid(){
var reg=/Android/ig
    if(reg.test(a)){
        return '安卓'
    }
}
funcnction isIphone(){
    var reg=/iphone/ig
    if(reg.test(a)){
        return 'ipone'
    }
}
function isIpad(){
    var reg=/ipad/ig
    if(reg.test(a)){
        return 'ipad'
    }
}
function isIOS(){
        var reg=/ios/ig
    if(reg.test(a)){
        return 'ios'
    }
}
最后編輯于
?著作權(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)容

  • 1- 算出代碼的輸出值;修改代碼讓 fnArri 輸出 i 結(jié)果:輸出 10,因?yàn)檠h(huán)的時(shí)候 fnArr[i] =...
    osborne閱讀 210評(píng)論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 修改代碼讓fnArri輸出...
    饑人谷_一葉之秋閱讀 335評(píng)論 0 0
  • 題目1: 輸出10 題目2 題目3 輸出1,3,2定時(shí)器中的函數(shù)會(huì)被自動(dòng)放到隊(duì)尾執(zhí)行,所以會(huì)先依順序輸出1和3,再...
    nicole914閱讀 208評(píng)論 0 0
  • 脂肪是一種沒有了不行,多了又給人帶來煩惱的東西。低調(diào)的優(yōu)美,高調(diào)的泛濫。 脂肪作為機(jī)體的必要組成,擔(dān)當(dāng)著能量庫(kù)、保...
    享輕悅閱讀 825評(píng)論 0 0
  • 我們總會(huì)選擇性遺忘些什么, 直到某月某日哭著醒來, 才會(huì)拾起那段歲月。 01 “快醒醒, 要遲到了”, 韓晴搖了搖...
    94暖暖陽(yáng)光閱讀 823評(píng)論 3 7

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