bom

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

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

        //輸出10

改寫 方法一:

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è)汽車對象,可以通過如下方式獲取汽車狀態(tài)

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.也會在整個(gè)代碼執(zhí)行完成之后再執(zhí)行

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

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

5.下面這段代碼輸出?如何輸出delayer: 0, delayer:1…(使用閉包來實(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ù)為偽類,沒有則不設(shè)置
getComputedStyle(test,pse).height //獲取元素的寬度,第二鴿參數(shù)為偽類,沒有則不設(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 如何編碼解碼?為什么要編碼?

  • URL的編碼/解碼方法
    1.decodeURI()
    2.decodeURIComponent()
    3.encodeURI()
    4.encodeURIComponent()

  • 區(qū)別

    • encodeURI方法不會對下列字符編碼
      1. ASCII字母
      2. 數(shù)字
      3. ~!@#$&*()=:/,;?+’
    • encodeURIComponent方法不會對下列字符編碼
      1. ASCII字母
      2. 數(shù)字
      3. ~!*()'
        所以encodeURIComponent比encodeURI編碼的范圍更大。
        實(shí)際例子來說,encodeURIComponent會把 http:// 編碼成 http%3A%2F%2F 而encodeURI卻不會。


        image
  • 為什么要編碼

    • HTTP協(xié)議中參數(shù)組件的傳輸是“key=value”鍵值對的形式,如果要傳輸多個(gè)參數(shù)就需要用“&”符號對鍵值對進(jìn)行分隔。例如?name1=value1&name2=$value2,這樣在服務(wù)器收到這種字符串的時(shí)候,會用“&”分隔出每一個(gè)參數(shù),然后再用“=”來分隔出參數(shù)值。如果我的參數(shù)值中就包含=或者&這樣的特殊子字符的時(shí)候,比如說“name1=value1”,其中value1的值是“va&lu=e1”,那么在傳輸過程中就會變成“name1=va&lu=e1”。用戶傳輸?shù)谋疽馐侵挥幸粋€(gè)鍵值對,但是服務(wù)器端會解析成兩個(gè)鍵值對,這樣就自然的產(chǎn)生了歧義。這時(shí)就需要對上述產(chǎn)生歧義的字符進(jìn)行編碼。參考1

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

        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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 2: 封裝一個(gè)汽車對象,可以通...
    任少鵬閱讀 290評論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]()輸出i。使用 兩種以上的方法 解決辦法: 總結(jié): 可...
    FLYSASA閱讀 284評論 0 0
  • 1. 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 var fnArr = [];...
    熊蛋子17閱讀 254評論 0 0
  • 閉包_定時(shí)器_BOM 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 封裝一個(gè)汽車對...
    marmot_ning閱讀 197評論 0 0
  • 人人命運(yùn)不同,選擇信是一種命運(yùn),不相信也是一種命運(yùn)。人生路越走越窄,不是因?yàn)椴粔蚵斆?,而是因?yàn)椴辉傧嘈?/div>
    Nadirou閱讀 162評論 0 0

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