閉包_定時器_BOM

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

    var fnArr = [];
    for (var i = 0; i < 10; i ++) {
        fnArr[i] =  function(){
            return i;
        };
    }
    console.log( fnArr[3]() );  //10
//將每一次循環(huán)的i都傳給j
    var fnArr = [];
    for (var i = 0; i < 10; i ++) {
      !function(j){
        fnArr[j] =  function(){
            return j;
        };
        }(i)
    }
    console.log( fnArr[3]() );  //

//let不可以重復(fù)聲明變量
    var fnArr = [];
    for (var i = 0; i < 10; i ++) {
      let temp = i;    // var temp=i        ==>9
        fnArr[i] =  function(){
            return temp;
        };
    }
    console.log( fnArr[3]() );  // 
function sss(p1,p2){
}
//相當(dāng)于
function sss(){
   var p1=arguments[0]
   var p2=arguments[1]
}

//∴
var a=100    //1號a
!function(a){ // 形參
   a=1;
   console.log('asdf'+a) //asdf1
}(a)
console.log(a)  //100
VM275:3 asdf1
VM275:5 100

!function(a){
    console.log(a) //99
}(99)

!function(a){  //2號a(形參)
    console.log(a)  //2號a
}(a) //傳入1號a(arguments[0])

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

var Car = (function(){
   var speed = 0;
   function setSpeed(s){
       speed = s
   }
   function getSpeed(){
     return speed;
   }
   function accelerate(){
     return speed += 10
   }
  function decelerate(){
    if (speed>0){
      return speed -=10
    }else{
      return speed = 0
    }
  }
  function getStatus(){
    if (speed>0){
      return 'running'
    }else{
      return 'stop'
    }
  }

   return {
      a: setSpeed,
      getSpeed: getSpeed,
      accelerate: accelerate,
      decelerate: decelerate,
      getStatus: getStatus,  
      speed: speed,
   }
})()
console.log(Car.a(30));
console.log(Car.getSpeed()); //30
console.log(Car.accelerate());
console.log(Car.getSpeed()); //40;
console.log(Car.decelerate());
console.log(Car.decelerate());
console.log(Car.getSpeed()); //20
console.log(Car.getStatus()); // 'running';
console.log(Car.decelerate()); 
console.log(Car.decelerate());
console.log(Car.getStatus());
console.log(Car.speed);  //0

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

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岸梨,

js是單線程,當(dāng)線程中沒有執(zhí)行任何同步代碼的前提下才會執(zhí)行異步代碼篷扩,setTimeout是異步代碼兄猩,所以setTimeout只能等js空閑才會執(zhí)行

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

var flag = true;
setTimeout(function(){
    flag = false;
},0)
while(flag){}
console.log(flag);
// 無輸出,因?yàn)閒lag=true鉴未,while無法退出枢冤,無法執(zhí)行接下來的代碼,更無法執(zhí)行異步任務(wù)

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

for(var i=0;i<5;i++){
    setTimeout(function(){
         console.log('delayer:' + i );
    }, 0);
    console.log(i);
}
//
0
1
2
3
4
undefined
5VM187:3 delayer:5
----------------------------------------------------
for(var i=0;i<5;i++){
    !function (i){
      setTimeout(function(){
         console.log('delayer:' + i );
    }, 0);
    }(i)
   console.log(i);
}
//
0
VM211:7 1
VM211:7 2
VM211:7 3
VM211:7 4
undefined
VM211:4 delayer:0
VM211:4 delayer:1
VM211:4 delayer:2
VM211:4 delayer:3
VM211:4 delayer:4

題目6: 如何獲取元素的真實(shí)寬高

window.getComputedStyle

style屬性內(nèi)的值非常機(jī)械淹真,讀取的就是元素的內(nèi)聯(lián)style屬性的值,而不是我們計算出來的實(shí)際值连茧,所以一般情況下沒什么用處
getComputedStyle是一個可以獲取當(dāng)前元素所有最終使用的CSS屬性值核蘸。返回的是一個CSS樣式聲明對象([object CSSStyleDeclaration])
(一看這個函數(shù)的名字我們就知道問題解決了)

低版本IE要用element.currentStyle()
function getStyle(e) {
return e.getComputedStyle() ? window.getComputedStyle(e) : e.currentStyle }
let trueWidth = getStyle(e).width;
let trueHeight = getStyle(e).height;

題目7: URL 如何編碼解碼?為什么要編碼啸驯?

JavaScript提供四個URL的編碼/解碼方法客扎。
decodeURI()
decodeURIComponent()
encodeURI()
encodeURIComponent()

區(qū)別

  • encodeURI方法不會對下列字符編碼
    - ASCII字母
    - 數(shù)字
    - ~!@#$&*()=:/,;?+'
  • encodeURIComponent方法不會對下列字符編碼
    - ASCII字母
    - 數(shù)字
    - ~!*()'

所以encodeURIComponent比encodeURI編碼的范圍更大。
實(shí)際例子來說罚斗,encodeURIComponent會把http://
編碼成http%3A%2F%2F
而encodeURI卻不會徙鱼。
如果你需要編碼整個URL,然后需要使用這個URL针姿,那么用encodeURI袱吆。 encodeURI("http://www.cnblogs.com/season-huang/some other thing");
//"http://www.cnblogs.com/season-huang/some%20other%20thing";
其中,空格被編碼成了%20距淫。但是如果你用了encodeURIComponent绞绒,那么結(jié)果變?yōu)?br> "http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing"
當(dāng)你需要編碼URL中的參數(shù)的時候,那么encodeURIComponent是最好方法榕暇。

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

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);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饲趋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撤蟆,更是在濱河造成了極大的恐慌奕塑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件家肯,死亡現(xiàn)場離奇詭異龄砰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)讨衣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門换棚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人反镇,你說我怎么就攤上這事固蚤。” “怎么了歹茶?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵夕玩,是天一觀的道長。 經(jīng)常有香客問我惊豺,道長燎孟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任尸昧,我火速辦了婚禮揩页,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烹俗。我一直安慰自己爆侣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布幢妄。 她就那樣靜靜地躺著兔仰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磁浇。 梳的紋絲不亂的頭發(fā)上斋陪,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天朽褪,我揣著相機(jī)與錄音置吓,去河邊找鬼。 笑死缔赠,一個胖子當(dāng)著我的面吹牛衍锚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嗤堰,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼戴质,長吁一口氣:“原來是場噩夢啊……” “哼度宦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起告匠,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤戈抄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后后专,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體划鸽,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年戚哎,在試婚紗的時候發(fā)現(xiàn)自己被綠了裸诽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡型凳,死狀恐怖丈冬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甘畅,我是刑警寧澤埂蕊,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站橄浓,受9級特大地震影響粒梦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荸实,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一匀们、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧准给,春花似錦泄朴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至畔规,卻和暖如春局扶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叁扫。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工三妈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人莫绣。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓畴蒲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親对室。 傳聞我的和親對象是個殘疾皇子模燥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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

  • 題目1: 下面的代碼輸出多少咖祭?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 var fnArr...
    saintkl閱讀 358評論 0 0
  • 題目1: 下面的代碼輸出多少蔫骂?修改代碼讓 fnArr[i]() 輸出 i么翰。使用 兩種以上的方法 題目2: 封裝一個...
    Taaaaaaaurus閱讀 346評論 0 0
  • 下面的代碼輸出多少?修改代碼讓fnArri 輸出 i辽旋。使用兩種以上的方法 如果想要讓fnArr[i]執(zhí)行后輸出i,...
    尾巴尾巴尾巴閱讀 319評論 0 0
  • 1. 下面的代碼輸出多少硬鞍?修改代碼讓fnArr[i]()輸出 i。使用兩種以上的方法 方法一: 方法二: 2. 封...
    _李祺閱讀 133評論 0 0
  • 看起平淡無奇的生活戴已,也會充滿大大小小的意外固该。我們要學(xué)會理解意外、擁抱意外糖儡、掌控意外伐坏。 一.理解意外。當(dāng)事情沒有按照...
    翠霞_0256閱讀 536評論 6 2