23.タイマー、閉パッケージ、BOM

3722 ワード

1.次のコードの出力はいくらですか?コードを修正してfnArriにiを出力させます.2つ以上の方法を使う
var fnArr = [];
for (var i = 0; i < 10; i ++) {
    fnArr[i] =  function(){
        return i;
    };
}
console.log( fnArr[3]() );  //10

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

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

2.自動車オブジェクトをパッケージ化し、以下のようにして自動車の状態を取得することができる
var Car = (function(){
    var speed = 0;
    function setSpeed(s){
       speed = s
    }
    function accelerate(){
        speed = speed+10
    }
    function decelerate(){
        speed = speed-10
    }
    function getSpeed(){
        console.log(speed)
    }
    function getStatus(){
        if(speed){
            console.log('running')
        }else{
            console.log('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.次のコードの出力結果は?どうして?
var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
//1 3 2
//  setTimeout       js             ,             ,setTimeout        。
//      setTimeout           ,     setTimeout

4.次のコードの出力結果は?どうして?
var flag = true;
setTimeout(function(){
    flag = false;
},0)
while(flag){}
console.log(flag);
//    ,setTimeout         ,  flag   true ,  while,      ,setTimeout      

5.次のコードの出力は?delayer:0、delayer:1を出力する方法...(閉パッケージで実現)
for(var i=0;i<5;i++){
    (function(){
        var n = i
        setTimeout(function(){
        console.log('delayer:' + n );
        }, 0);
    })()
    console.log(i);
}

6.エレメントの真のアスペクトを取得する方法
getComputedStyle()が返すスタイルはリアルタイムのCSSStyleDeclarationオブジェクトで、要素のスタイルが変更されると自動的に更新されます.

123
var div = document.querySelector('div') var a = getComputedStyle(div).height var b = getComputedStyle(div).width console.log(a,b)//100px 443px

7.URLはどのようにコードして復号しますか?どうしてコードするの?
参照1.URL符号化と復号2.URLコードについて
//  
decodeURI() 
decodeURIComponent()
//    
encodeURI() //  ASCII  or  or~!@#$&*()=:/,;?+'    
encodeURIComponent()//  ASCII  or  or~!*()'    
  • ネットワーク規格では、アルファベットと数字[0-9 a-zA-Z]、一部の特殊記号「$-.+!*'()」[二重引用符を含まない]、および一部の予約語のみが、符号化せずにURLに直接使用できることが規定されている.したがって、漢字等の文字については
  • を符号化する必要がある.
  • は、曖昧にならないように、特殊な意味を持つ文字を使用したパラメータを符号化する必要がある.文字(!$&'()*+,;=)クエリー・パラメータのキー値のペアを表す=など、各コンポーネントで区切りの役割を果たすために使用され、&シンボルはクエリーの複数のキー値のペアを区切るために使用されます.コンポーネント内の通常のデータにこれらの特殊文字が含まれている場合は、符号化する必要があります.

  • 8.以下の関数を補完し、ユーザーのブラウザタイプを判断する
    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 (/(ipad)|(iphone)/i.test(navigator.userAgent))
    }