閉包_定時器_BOM

題目1: 下面的代碼輸出多少共屈?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法

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

在線預覽

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

在線預覽

題目2: 封裝一個汽車對象今瀑,可以通過如下方式獲取汽車狀態(tài)

  var Car = (function(){
  var speed = 0;
  function setSpeed(s){
    speed = s
  }
  function getSpeed(s){
    console.log(speed)
  }
  function accelerate(){
    speed += 10
  }
  function decelerate(){
    speed -= 10
  }
  function getStatus(){
    if(speed > 0){
      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:下面這段代碼輸出結(jié)果是? 為什么?

  var a = 1;
  setTimeout(function(){
    a = 2;
    console.log(a);
  }, 0);
  var a ;
  console.log(a);
  a = 3;
  console.log(a);
//按照瀏覽器加載順序程梦,全部加載完成,再執(zhí)行橘荠,所以最后執(zhí)行setTimeout
//輸出結(jié)果為:
//1 輸出的是var a = 1的值屿附,由于變量提升重新聲明對值無影響
//3 輸出的是a = 3
//2 輸出的是setTimeout里函數(shù)中a=2的值

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

  var flag = true;
  setTimeout(function(){
    flag = false;
  },0)//異步執(zhí)行,等待所有任務結(jié)束后執(zhí)行
  while(flag){}  //只要滿足條件就會一直循環(huán)
  console.log(flag); //執(zhí)行不到這里哥童,不會輸出結(jié)果

題目5: 下面這段代碼輸出挺份?如何輸出delayer: 0, delayer:1...(使用閉包來實現(xiàn))

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 fn(i){
      setTimeout(function(){
        console.log('delayer:' + i );
      }, 0);
    }
    fn(i)
  }
// delayer:0
// delayer:1
// delayer:2
// delayer:3
// delayer:4

題目6: 如何獲取元素的真實寬高

<div id="panel_Search" style = "width=200px;height=88px"></div>
<script>
  var panelSearch = document.querySelector('#panel_Search')
  var panelSearchWidth = panelSearch.offsetWidth 
  var panelSearchHeight = panelSearch.offsetHeight
  console.log('該元素寬度為:'+panelSearchWidth+'px')
  console.log('該元素高度為:'+panelSearchHeight+'px')
</script>
// 該元素寬度為:200px
// 該元素高度為:88px

題目7: URL 如何編碼解碼?為什么要編碼贮懈?

  • 編碼
    • escape()
      (對除ASCII字母匀泊、數(shù)字优训、標點符號 @ * _ + - . / 以外的其他字符進行編碼。)
    • encodeURI()
      (返回編碼為有效的統(tǒng)一資源標識符 (URI) 的字符串各聘,不會被編碼的字符:! @ # $ & * ( ) = : / ; ? + ' encodeURI()是Javascript中真正用來對URL編碼的函數(shù)揣非。)
    • encodeURIComponent('你好')
      (對URL的組成部分進行個別編碼,而不用于對整個URL進行編碼)
"%E4%BD%A0%E5%A5%BD"
  • 解碼
    • unescape()
    • decodeURI()
    • decodeURIComponent("%E4%BD%A0%E5%A5%BD")
'你好'

通常如果一樣東西需要編碼躲因,說明這樣東西并不適合傳輸早敬。對于Url來說,之所以要進行編碼大脉,是因為Url中有些字符會引起歧義搞监。

  • 例如,Url參數(shù)字符串中使用key=value鍵值對這樣的形式來傳參箱靴,鍵值對之間以&符號分隔,如/s?q=abc&ie=utf-8荷愕。如果你的value字符串中包含了=或者&衡怀,那么勢必會造成接收Url的服務器解析錯誤,因此必須將引起歧義的&和=符號進行轉(zhuǎn)義安疗,也就是對其進行編碼抛杨。

  • 又如,Url的編碼格式采用的是ASCII碼荐类,而不是Unicode怖现,這也就是說你不能在Url中包含任何非ASCII字符,例如中文玉罐。否則如果客戶端瀏覽器和服務端瀏覽器支持的字符集不同的情況下屈嗤,中文可能會造成問題。

Url編碼的原則就是使用安全的字符(沒有特殊用途或者特殊意義的可打印字符)去表示那些不安全的字符吊输。

其他:


關于URL編碼-阮一峰

題目8: 補全如下函數(shù)饶号,判斷用戶的瀏覽器類型

function isAndroid(){
  return /Android/i.test(navigator.userAgent)
}
funcnction isIphone(){
  return /iphone/i.test(navigator.userAgent)
}
function isIpad(){
  return /ipad/i.test(navigator.userAgent)
}
function isIOS(){
  return /ios/i.test(navigator.userAgent)
}

參考文檔

為什么要進行URL編碼
js對url進行編碼和解碼(三種方式區(qū)別)
JS 中的閉包是什么?
什么是異步季蚂?
定時器
閉包
bom
js獲取網(wǎng)頁和元素的寬度茫船、高度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扭屁,隨后出現(xiàn)的幾起案子算谈,更是在濱河造成了極大的恐慌,老刑警劉巖料滥,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件然眼,死亡現(xiàn)場離奇詭異,居然都是意外死亡葵腹,警方通過查閱死者的電腦和手機罪治,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門丽声,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人觉义,你說我怎么就攤上這事雁社。” “怎么了晒骇?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵霉撵,是天一觀的道長。 經(jīng)常有香客問我洪囤,道長徒坡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任瘤缩,我火速辦了婚禮喇完,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剥啤。我一直安慰自己锦溪,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布府怯。 她就那樣靜靜地躺著刻诊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牺丙。 梳的紋絲不亂的頭發(fā)上则涯,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音冲簿,去河邊找鬼粟判。 笑死,一個胖子當著我的面吹牛峦剔,可吹牛的內(nèi)容都是我干的浮入。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼羊异,長吁一口氣:“原來是場噩夢啊……” “哼事秀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起野舶,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤易迹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后平道,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睹欲,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窘疮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袋哼。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闸衫,靈堂內(nèi)的尸體忽然破棺而出涛贯,到底是詐尸還是另有隱情,我是刑警寧澤蔚出,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布弟翘,位于F島的核電站,受9級特大地震影響骄酗,放射性物質(zhì)發(fā)生泄漏稀余。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一趋翻、第九天 我趴在偏房一處隱蔽的房頂上張望睛琳。 院中可真熱鬧,春花似錦踏烙、人聲如沸师骗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丧凤。三九已至募闲,卻和暖如春步脓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浩螺。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工靴患, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人要出。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓鸳君,卻偏偏與公主長得像,于是被迫代替她去往敵國和親患蹂。 傳聞我的和親對象是個殘疾皇子或颊,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArri 輸出 i传于。使用 兩種以上的方法 方法一: 方法二: 方法三...
    南山碼農(nóng)閱讀 278評論 0 1
  • 題目1: 下面的代碼輸出多少囱挑?修改代碼讓 fnArri 輸出 i。使用 兩種以上的方法 輸出10 修改為1var ...
    我是一只_魚閱讀 206評論 0 1
  • 題目1: 下面的代碼輸出多少沼溜?修改代碼讓 fnArr[i]() 輸出 i平挑。使用 兩種以上的方法 題目2: 封裝一個...
    Taaaaaaaurus閱讀 342評論 0 0
  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 var fnArr...
    saintkl閱讀 354評論 0 0
  • 早上起床遙望小區(qū)中間通熄,發(fā)現(xiàn)桃花開了唆涝,梨花開了,鐵海棠開了唇辨,報春花也開了廊酣。小鳥在窗外喳喳的叫,它知道早起有蟲吃助泽,我也...
    高琳旭閱讀 126評論 0 0