閉包、定時器、

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

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

方法1

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

方法2

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

方法3

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

二、 封裝一個汽車對象,可以通過如下方式獲取汽車狀態(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';
   }else{
    return 'stop';
   }
}
   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';

三、** 下面這段代碼輸出結(jié)果是? 為什么?

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);

由于setTimeout()是異步的,在執(zhí)行一個頁面時,即使setTimeout()里的延遲時間設(shè)置為0,仍然要在同步代碼執(zhí)行完畢后,才執(zhí)行setTimeout(),以上代碼等同于

var a = 1;
var a ;
console.log(a);//1
a = 3;
console.log(a);//3
setTimeout(function(){
    a = 2;
    console.log(a);
}, 0);//2

四、** 下面這段代碼輸出結(jié)果是? 為什么?

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

以上代碼等同于

var flag = true;
while(flag){}
setTimeout(function(){
    flag = false;
},0)//會在while()循環(huán)結(jié)束后執(zhí)行,但是flag=true,會無限循環(huán),setTimeout()不會執(zhí)行
console.log(flag);

五、** 下面這段代碼輸出?如何輸出delayer: 0, delayer:1...(使用閉包來實現(xiàn))

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

六、 如何獲取元素的真實寬高

Paste_Image.png

在IE低版本時用currentStyle代替,使用方法是element.currentStyle
七: URL 如何編碼解碼?為什么要編碼?
js中有兩種編碼方式
encodeURI()方法不會對ASCII字母,數(shù)字,~!@#$&()/;?,+'等進行編碼
encodeURIComponent()方法不會對ASCII字母,數(shù)字,~!
()'等進行編碼
解碼方式對應(yīng)為decodeURI()和decodeURICompenent()
http協(xié)議傳輸?shù)膮?shù)是以key-value鍵值對形式的,如果傳遞多個參數(shù),用&對鍵值對進行分割,用=分割出參數(shù)值,但是如果傳遞的參數(shù)本身含有&,=時容易造成歧義。

八、補全如下函數(shù),判斷用戶的瀏覽器類型

    function isAndroid(){
        return /Andriod/i.test(navigator.userAgent);
}
function isIphone(){
    return /iphone/i.test(navigator.userAgent);
}
function isIpad(){
    return /ipad/i.test(navigator.userAgent);
}
function isIOS(){
    return /ios/i.test(navigator.userAgent);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 var fnArr...
    saintkl閱讀 433評論 0 0
  • 1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 輸出結(jié)果為10,因為retur...
    DeeJay_Y閱讀 382評論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 輸出10 修改為1var ...
    我是一只_魚閱讀 268評論 0 1
  • 1、下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 方法一:閉包 方法二:和方法一差...
    zh_yang閱讀 389評論 0 0
  • 希望自己 能夠撐起夢想能夠支持自己走得更穩(wěn)更遠更長
    日月淺言閱讀 310評論 0 0

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