クローズドタイマーBOM

4139 ワード

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

for(var i=0; i<10;i++) {
   fnArr[i] = (function(a){
          return a;
    })(i);          
} 

for(var i=0; i<10;i++) {
     (function(a){
        fnArr[a] = function(){
           return a; 
        }
      })(i)          
} 

 //let           var  
 for(var i=0; i<10;i++) {
      let val = i;
      fnArr[i] = function(){
      return val;
   };          
} 

タイトル2:自動車の対象物をパッケージ化し、以下の方法で自動車の状態を取得することができる
var Car = (function(){
   var speed = 0;
   function setSpeed(s){
      if(s>0){
         speed = s
      }else{ return }
   }
   function getSpeed(){
    return speed;
   }
   function accelerate(){
     speed = speed + 10;
     return speed;
   }
   function decelerate(){
     if(speed >= 10){
       speed = 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,
     speed: 'error'
   }
})()
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);    2
}, 0);
var a ;
console.log(a);   1
a = 3;
console.log(a);  3

打出結果は1 3 2が1先、そしてaが3 settimeout関数として付与され、JSの他のコードの実行が完了した後に実行される
题目4:次のコード出力结果は?どうして?
var flag = true;
setTimeout(function(){
  flag = false;
},0)
while(flag){}
console.log(flag); 
/*       。
   while(flag){} ,flag = true,
setTimeout                  , 
      flag   true,      console.log  ,
   while(flag){}  ,        。*/***
(   60   Chrome JS       ,      ,     true)

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


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

テーマ6:どのように要素の真実の幅の高さを獲得します
Windows.getComputedStyle style属性内の値は非常に機械的で、読み込まれたのは要素のインラインstyle属性の値であり、私たちが計算した実際の値ではないので、一般的にはgetComputedStyleは現在の要素のすべての最終的に使用されるCSS属性値を取得することができます.CSSスタイル宣言オブジェクトを返します([object CSSStyleDeplaration])(この関数の名前を見ると問題が解決したことがわかります)
var logo=document.querySelector('#result_logo')aa=window.getComputedStyle(logo)aa.height aa.width低バージョンIEはelement.currentStyle()
タイトル7:URLはどのようにコードして復号しますか?どうしてコードするの?
Urlには英字(a-zA-Z)、数字(0-9)、-.~のみが許可されています.4つの特殊文字とすべての保持文字.これは、URLに漢字やギリシャ文字などの他の文字があれば、符号化して使用しなければならないことを意味します.異なるオペレーティングシステム、異なるブラウザ、異なるWeb文字セットは、完全に異なる符号化結果をもたらします.Javascriptを使用してURLをエンコードしてからサーバに送信する場合は、ブラウザに手を出す機会を与えないでください.Javascriptの出力は常に一致するため,サーバが得たデータがフォーマット統一されていることが保証される.JavaScriptが提供する4つのURLの符号化/復号方法decodeURI()decodeURIComponent()encodeURI()encodeURIComponent()違い
  • encodeURIメソッドは、次の文字に対してASCIIアルファベット数字を符号化しません~!@#$&*()=:/,;?+'
  • encodeURIComponentメソッドは、次の文字に対してASCIIアルファベット数字を符号化しません~!*()'従ってencodeURIComponentはencodeURI符号化の範囲よりも広い.実際の例では、encodeURIComponentはhttp://tをhttp%3 A%2 F%2 Fに符号化しますが、encodeURIはしません.URL全体をエンコードし、このURLを使用する必要がある場合は、encodeURIを使用します.URLのパラメータをエンコードする必要がある場合は、encodeURIComponentが最善の方法です.

  • テーマ8:以下の関数を補完し、ユーザーのブラウザタイプを判断する
    function isAndroid(){ 
     return /Android/.test(navigator.userAgent); } 
    funcnction isIphone(){ 
     return /iphone/.test(navigator.userAgent); } 
    function isIpad(){ 
     return /ipad/.test(navigator.userAgent); } 
    function isIOS(){ return /(iphone)|(ipad)/i.test(navigator.userAgent); }