JS基礎-閉包_定時器_BOM

1.下面的代碼輸出多少侵续?修改代碼讓fnArr[i]() 輸出 i燎潮。使用 兩種以上的方法
   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 ++) {
     fnArr[i] =  function(){
          var n=i
              return function(){
                 return n;
              }
      }();
   }
  console.log( fnArr[3]() );  //輸出3

  //方法2 
   var fnArr = [];
   for (var i = 0; i < 10; i ++) {
        (function(i){
            fnArr[i] =  function(){
                // console.log(i)
                return i
            }
        })(i)
   }
  console.log( fnArr[3]() ); //輸出3
2.封裝一個汽車對象喻鳄,可以通過如下方式獲取汽車狀態(tài)
   var Car = (function(){
     var speed = 0;
     function setSpeed(s){
       speed = s
     }
   ...
     return {
      setSpeed: setSpeed,
      ...
      }
   })()
  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

   //代碼
   var Car = (function(){
    // speed:速度
   var speed = 0;
   function setSpeed(s){
      speed = s
   }
   function getSpeed(){
      return speed
   }
   // accelerate:加速
   function accelerate(){
      return speed += 10
   }
   // 減速
   function decelerate(){
    return speed -= 20
   }
   // 狀態(tài)
   function getStatus(){
      if(speed === 0){
        return "stop"
      }else{
        return "running"
      }
   }
   return {
      setSpeed: setSpeed,
      getSpeed: getSpeed,
      decelerate: decelerate,
      getStatus: getStatus,
      accelerate: accelerate
   }
  })()
    
  // 輸出
  Car.setSpeed(30);
  Car.getSpeed(); //30
  console.log(Car.getSpeed())

  Car.accelerate();
  Car.getSpeed(); //40;
  console.log(Car.getSpeed())

  Car.decelerate();
  // console.log(Car.decelerate());
  console.log(Car.getSpeed()); //20
  Car.getStatus(); // 'running';
  console.log(Car.getStatus())

  Car.decelerate(); 
  Car.getStatus();  //'stop';
  console.log(Car.getSpeed())
  console.log(Car.getStatus())
  // 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
 // 原因: JavaScript 是單線程執(zhí)行的,也就是無法同時執(zhí)行多段代碼确封,當某一段代碼正在執(zhí)行的
 // 時候除呵,所有后續(xù)的任務都必須等待,形成一個隊列爪喘,一旦當前任務執(zhí)行完畢颜曾,再從隊列中取出下
 // 一個任務。這也常被稱為 “阻塞式執(zhí)行”秉剑。
 // 如果代碼中設定了一個 setTimeout泛豪,那么瀏覽器便會在合適的時間,將代碼插入任務隊列侦鹏,
 // 如果這個時間設為 0诡曙,就代表立即插入隊列,但不是立即執(zhí)行略水,仍然要等待前面代碼執(zhí)行完畢价卤。
 // 所以setTimeout 并不能保證執(zhí)行的時間,是否及時執(zhí)行取決于JavaScript線程是擁擠還是空閑
 // 因此渊涝,即使你給setTimeout設定的延時為0ms慎璧,它也不會立即觸發(fā)
4.下面這段代碼輸出結果是? 為什么?
   var flag = true;
   setTimeout(function(){
      flag = false;
   },0)
  while(flag){}
  console.log(flag);

  // 答:
  // 什么也不會輸出床嫌,while(flag){} 這個條件會無限循環(huán),沒有break或return炸卑。
  // 所以后面的都不會執(zhí)行了
5.下面這段代碼輸出既鞠?如何輸出delayer: 0, delayer:1...(使用閉包來實現(xiàn))
for(var i=0;i<5;i++){
    setTimeout(function(){
         console.log('delayer:' + i );
    }, 0);
    console.log(i);  // 輸出 1 2 3 4 5    5delayer
}
  //  第一種
   for(var i=0;i<5;i++){
     setTimeout(function(){
       console.log('delayer:' + i );
       }, 0);
     console.log(i);
   }

//  第二種
// for(var i=0;i<5;i++){
//  setTimeout(function(i){
//      return function(){
//          console.log('delayer:' + i );
//      }
//  }(i), 0);
//  console.log(i);
// }
6.如何獲取元素的真實寬高
   // step1 獲取元素節(jié)點
   // var node=document.querySelector("#header")
   // step2 利用window.getComputedStyle()獲取寬高
   // window.getComputedStyle(node).width
   // window.getComputedStyle(node).height
7.URL 如何編碼解碼?為什么要編碼盖文?
  • URL要編碼的原因:URL 只能使用 ASCII 字符集來通過因特網進行發(fā)送嘱蛋。也就是說URL只能使用英文字母、阿拉伯數(shù)字和某些標點符號五续,不能使用其他文字和符號洒敏。

     (1)Url編碼通常也被稱為百分號編碼(percent-encoding),是因為它的編碼方式非常簡
      單疙驾,使用%百分號加上兩位的字符——0123456789ABCDEF——代表一個字節(jié)的十六進制形式
     (2)
         對于ASCII字符则北,字母a 在ASCII碼中對應的字節(jié)是0x61鹏溯,那么Url編碼之后得到的就是
      %61朋魔,字母abc棚菊, url編碼后得到的就是%61%62%63
     
         對于非ASCII字符,RFC文檔建議使用utf-8對其進行編碼得到相應的字節(jié)扳肛,然后對每個字
      節(jié)執(zhí)行百分號編碼傻挂。
    
         如"中文"使用UTF-8字符集得到的字節(jié)為0xE4 0xB8 0xAD 0xE6 0x96 0x87,經過Url編
      碼之后得到"%E4%B8%AD%E6%96%87"挖息。
    
        *使用Javascript先對URL編碼金拒,然后再向服務器提交,不要給瀏覽器插手的機會套腹。這樣就
     能保證客戶端只用一種編碼方法向服務器發(fā)出請求  
    
  • URL 如何編碼解碼
    escape绪抛、encodeURI和encodeURIComponent 編碼
    unescape、decodeURI和decodeURIComponent 解碼

    區(qū)別:escape是對字符串(string)進行編碼电禀,(而另外兩種是對URL)幢码,作用是讓它們在所有電腦上可讀。編碼之后的效果是%XX或者%uXXXX這種形式尖飞。

    注意:什么場合用什么方法症副,從實際例子來說   
    (1)如果只是編碼字符串,不和URL有半毛錢關系葫松,那么用escape瓦糕。
    (2)如果你需要編碼整個URL底洗,然后需要使用這個URL腋么,那么用encodeURI。
    (3)當你需要編碼URL中的參數(shù)的時候亥揖,那么encodeURIComponent是最好方法珊擂。

參考文章
簡單明了區(qū)分escape圣勒、encodeURI和encodeURIComponent
js對url進行編碼和解碼(三種方式區(qū)別)

8: 補全如下函數(shù),判斷用戶的瀏覽器類型
   function isAndroid(){
   }
   funcnction isIphone(){
   }
   function isIpad(){
   }
   function isIOS(){
   }

   //代碼
   function isAndroid(){
    return /android/i.test(window.navigator.userAgent);
   }
   function isIphone(){
    return /iphone/i.test(window.navigator.userAgent);
   }
   function isIpad(){
    return /ipad/i.test(window.navigator.userAgent);
   }
   function isIOS(){
    return /ios|iphone/i.test(window.navigator.userAgent);
   }

本文題文內容來自于饑人谷摧扇,版權歸饑人谷_海瀚和饑人谷所有圣贸,轉載需說明來源

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扛稽,隨后出現(xiàn)的幾起案子吁峻,更是在濱河造成了極大的恐慌,老刑警劉巖在张,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件用含,死亡現(xiàn)場離奇詭異,居然都是意外死亡帮匾,警方通過查閱死者的電腦和手機啄骇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘟斜,“玉大人缸夹,你說我怎么就攤上這事÷菥洌” “怎么了虽惭?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長壹蔓。 經常有香客問我趟妥,道長,這世上最難降的妖魔是什么佣蓉? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任披摄,我火速辦了婚禮,結果婚禮上勇凭,老公的妹妹穿的比我還像新娘疚膊。我一直安慰自己,他們只是感情好虾标,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布寓盗。 她就那樣靜靜地躺著,像睡著了一般璧函。 火紅的嫁衣襯著肌膚如雪傀蚌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天蘸吓,我揣著相機與錄音善炫,去河邊找鬼。 笑死库继,一個胖子當著我的面吹牛箩艺,可吹牛的內容都是我干的窜醉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼艺谆,長吁一口氣:“原來是場噩夢啊……” “哼榨惰!你這毒婦竟也來了?” 一聲冷哼從身側響起静汤,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤琅催,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后虫给,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恢暖,經...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年狰右,在試婚紗的時候發(fā)現(xiàn)自己被綠了杰捂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡棋蚌,死狀恐怖嫁佳,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情谷暮,我是刑警寧澤蒿往,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站湿弦,受9級特大地震影響瓤漏,放射性物質發(fā)生泄漏。R本人自食惡果不足惜颊埃,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一蔬充、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧班利,春花似錦饥漫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闯割,卻和暖如春彻消,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宙拉。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工宾尚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鼓黔。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓央勒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親澳化。 傳聞我的和親對象是個殘疾皇子崔步,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內容

  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i缎谷。使用 兩種以上的方法 方法一: 方法二: 方法三...
    南山碼農閱讀 286評論 0 1
  • 題目1: 下面的代碼輸出多少井濒?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 題目2: 封裝一個汽車對象...
    怎么昵稱閱讀 201評論 0 0
  • 隨著《最好的我們》大結局,“洛枳希痴、盛淮南”被刷上微博熱搜者甲。對此,我一點也不感到訝異砌创。作為一名原著粉虏缸,很能體會觀眾們...
    fay就是我閱讀 613評論 5 2
  • 目錄 第三章 我要留下來 大約過了五分鐘,男子緩緩轉過身來嫩实,看見小麥依然在餐廳里刽辙,不僅如此,還穩(wěn)如泰山地...
    瀟湘月明閱讀 561評論 0 5
  • 常見有人闖紅燈甲献,真的替他擔心宰缤。也許,這一次他沒出什么事晃洒,如果他一直闖下去慨灭,肯定后果不堪設想。人總在挑戰(zhàn)自己球及,這種冒...
    a20a0458cf92閱讀 476評論 0 0