閉包定時器bom

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

var fnArr = [];
for (var i = 0; i < 10; i ++) {
    fnArr[i] =  function(){
        return i;
    };
}
console.log( fnArr[3]() );  //'10'
//方法一
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]() );
//方法三
var fnArr = [];
for (let i = 0; i < 10; i ++) {
    fnArr[i] =  function(){
        return i;
    };
}
console.log( fnArr[3]() );

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

var Car = (function(){
    var speed = 0;
    function setSpeed(s){
        return speed = s;
    }
    function getSpeed() {
        return speed;
    }
    function accelerate() {
        return speed += 10;
    }
    function decelerate() {
        return speed > 0 ? speed -= 10 : speed;
    }
    function getStatus() {
        return speed > 0 ? 'running':'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);//‘2’,setTimeout指定的代碼,必須等到本次執(zhí)行的所有代碼都執(zhí)行完门烂,才會執(zhí)行
}, 0);
var a ;
console.log(a);//'1'
a = 3;
console.log(a);//'3'

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

var flag = true;
setTimeout(function(){//等到本次執(zhí)行的所有代碼都執(zhí)行完乳愉,才會執(zhí)行
    flag = false;
},0)
while(flag){}//首先執(zhí)行,此時setTimeout未執(zhí)行屯远,flag恒為true蔓姚,因此這一句會無限循環(huán)
console.log(flag);//因為上一句代碼無限循環(huán),所以這一句不會執(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);
}

輸出:

0
1
2
3
4
delayer:5
delayer:5
delayer:5
delayer:5
delayer:5

使用閉包實現(xiàn)輸出delayer: 0, delayer:1...

for(var i=0;i<5;i++){
    setTimeout((function(i){
        return function () {
            console.log('delayer:' + i );
        }
    })(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: 如何獲取元素的真實寬高

  1. clientWidth和clientHeight
    這組屬性可以獲取元素可視區(qū)的大小坡脐,可以得到元素內(nèi)容及內(nèi)邊距所占據(jù)的空間大小。返回了元素大小房揭,但沒有單位备闲,默認單位是px,如果你強行設置了單位捅暴,比如100em之類恬砂,它還是會返回px的大小。(CSS獲取的話蓬痒,是照著你設置的樣式獲取)泻骤。對于元素的實際大小,clientWidth和clientHeight理解方式如下:
    a. 增加邊框梧奢,無變化狱掂;
    b. 增加外邊距,無變化亲轨;
    c. 增加滾動條趋惨,最終值等于原本大小減去滾動條的大小瓶埋;
    d. 增加內(nèi)邊距希柿,最終值等于原本大小加上內(nèi)邊距的大小养筒;
<div id="test"></div>
#test{
   background-color: green;
   width: 200px;
   height: 200px;
   border: solid 5px red;  /* 對應a理解曾撤,結果:200,200 */
   margin: 10px;  /* 對應b理解,結果:200,200*/
   padding: 20px;  /* 對應c理解晕粪,結果:240,240*/
   overflow: scroll;  /* 對應d理解挤悉,結果:223,223,>223=200(css大形紫妗)+40(兩邊內(nèi)邊距)-17(滾動條寬度)*/
}
window.onload = function(){
   var obj = document.getElementById("test");
   alert(obj.clientWidth + "," + obj.clientHeight);
};

如果沒有設置任何CSS的寬和高度装悲,那么非IE瀏覽器會算上滾動條和內(nèi)邊距的計算后的大小昏鹃,而IE瀏覽器則返回0(IE8已修復)

  1. scrollWidth和scrollHeight
    這組屬性可以獲取滾動內(nèi)容(可見內(nèi)容)的元素大小。返回了元素大小诀诊,默認單位是px洞渤。如果沒有設置任何CSS的寬和高度,它會得到計算后的寬度和高度属瓣。對于元素的實際大小载迄,scrollWidth和scrollHeight理解如下:
    ①.增加邊框,不同瀏覽器有不同解釋(下面在IE8中運行正常抡蛙,IE6運行不正常):
    a. Firefox和Opera瀏覽器會增加邊框的大小护昧,220x220
    b. IE、Chrome和Safari瀏覽器會忽略邊框大小粗截,200x200
    c. IE瀏覽器只顯示它本來內(nèi)容的高度惋耙,200x18(IE8已經(jīng)修改該問題)
    ②.增加內(nèi)邊距,最終值會等于原本大小加上內(nèi)邊距大小熊昌,220x220绽榛,IE為220x38。
    ③. 增加滾動條浴捆,最終值會等于原本大小減去滾動條大小蒜田,184x184,IE為184x18
    ④. 增加外邊據(jù)选泻,無變化冲粤。
    ⑤. 增加內(nèi)容溢出,F(xiàn)irefox页眯、Chrome和IE獲取實際內(nèi)容高度梯捕,Opera比前三個瀏覽器獲取的高度偏小,Safari比前三個瀏覽器獲取的高度偏大窝撵。
  2. offsetWidth和offsetHeight
    這組屬性可以返回元素實際大小傀顾,包含邊框、內(nèi)邊距和滾動條碌奉。返回了元素大小短曾,默認單位是px。如果沒有設置任何CSS的寬和高度赐劣,他會得到計算后的寬度和高度嫉拐。對于元素的實際大小,offsetWidth和offsetHeight理解如下:
    ①.增加邊框魁兼,最終值會等于原本大小加上邊框大小婉徘,為220;
    ②.增加內(nèi)邊距,最終值會等于原本大小加上內(nèi)邊距大小盖呼,為220儒鹿;
    ③.增加外邊據(jù),無變化几晤;
    ④.增加滾動條约炎,無變化,不會減行否章钾;
    對于元素大小的獲取,一般是塊級(block)元素并且以設置了CSS大小的元素較為方便热芹。如果是內(nèi)聯(lián)元素(inline)或者沒有設置大小的元素就尤為麻煩
<div id="test">test div element</div>
#test{
   background-color: green;
   width: 200px;
   height: 200px;
   border: solid 10px red; /*結果:220,220*/
   margin: 10px; /*結果:220,220(無變化)*/
   padding: 10px; /*結果:240,240*/
   overflow:scroll; /*結果:240,240(無變化)*/
}
window.onload = function(){
   var obj = document.getElementById("test");
   alert(obj.offsetWidth + "," + obj.offsetHeight);
};

http://www.jb51.net/article/61460.htm

題目7: URL 如何編碼解碼?為什么要編碼惨撇?

  • url為什么要編碼伊脓?

URL 是可移植的(portable)。它要統(tǒng)一地命名因特網(wǎng)上所有的資源魁衙,這也就意味著要通過各種不同的協(xié)議來傳送這些資源报腔。這些協(xié)議在傳輸數(shù)據(jù)時都會使用不同的機制,所以剖淀,設計 URL纯蛾,使其可以通過任意因特網(wǎng)協(xié)議安全地傳輸是很重要的。
安全傳輸意味著 URL 的傳輸不能丟失信息纵隔。有些協(xié)議翻诉,比如傳輸電子郵件的簡單郵件傳輸協(xié)議(Simple Mail Transfer Protocol,SMTP)捌刮,所使用的傳輸方法就會剝?nèi)ヒ恍┨囟ǖ淖址龌汀榱吮荛_這些問題,URL 只能使用一些相對較小的绅作、通用的安全字母表中的字符芦圾。
除了希望 URL 可以被所有因特網(wǎng)協(xié)議進行傳送之外,設計者們還希望URL也可供人類閱讀读第。因此海蔽,即使不可見锻全、不可打印的字符能夠穿過郵件程序,從而成為可移植的夜焦,也不能在 URL 中使用。
URL 還得是完整的役拴,這就使問題變得更加復雜了糊探。URL 的設計者們認識到有時人們可能會希望 URL 中包含除通用的安全字母表之外的二進制數(shù)據(jù)或字符。因此,需要有一種轉(zhuǎn)義機制科平,能夠?qū)⒉话踩淖址幋a為安全字符褥紫,再進行傳輸。

  • URL如何編碼解碼瞪慧?
    JavaScript提供四個URL的編碼/解碼方法髓考。
    decodeURI()
    decodeURIComponent()
    encodeURI()
    encodeURIComponent()
    區(qū)別
    encodeURI方法不會對下列字符編碼
    ASCII字母
    數(shù)字
    ~!@#$&*()=:/,;?+'
    encodeURIComponent方法不會對下列字符編碼
    ASCII字母
    數(shù)字
    ~!*()'
    所以encodeURIComponent比encodeURI編碼的范圍更大。
    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豌研,那么結果變?yōu)?
    "http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing"
    
    當需要編碼URL中的參數(shù)的時候,那么encodeURIComponent是最好方法唬党。
    var param = "http://www.cnblogs.com/season-huang/"; 
    //param為參數(shù)param = encodeURIComponent(param);
    var url = "http://www.cnblogs.com?next=" + param;
    console.log(url) 
    //"http://www.cnblogs.com?next=http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2F"
    

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

function isAndroid(){
    return /Android/.test(navigator.userAgent);
}
function isIphone(){
    return /Iphone/.test(navigator.userAgent);
}
function isIpad(){
    return /Ipad/.test(navigator.userAgent);
}
function isIOS(){
    return /(Ipad)|(Iphone)/.test(navigator.userAgent);
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驶拱,隨后出現(xiàn)的幾起案子霜浴,更是在濱河造成了極大的恐慌,老刑警劉巖蓝纲,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阴孟,死亡現(xiàn)場離奇詭異,居然都是意外死亡税迷,警方通過查閱死者的電腦和手機温眉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翁狐,“玉大人类溢,你說我怎么就攤上這事÷独粒” “怎么了闯冷?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長懈词。 經(jīng)常有香客問我蛇耀,道長,這世上最難降的妖魔是什么坎弯? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任纺涤,我火速辦了婚禮译暂,結果婚禮上,老公的妹妹穿的比我還像新娘撩炊。我一直安慰自己外永,他們只是感情好,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布拧咳。 她就那樣靜靜地躺著伯顶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骆膝。 梳的紋絲不亂的頭發(fā)上祭衩,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音阅签,去河邊找鬼掐暮。 笑死,一個胖子當著我的面吹牛政钟,可吹牛的內(nèi)容都是我干的劫乱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锥涕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狭吼?” 一聲冷哼從身側響起层坠,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刁笙,沒想到半個月后破花,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡疲吸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年座每,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摘悴。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡峭梳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蹂喻,到底是詐尸還是另有隱情葱椭,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布口四,位于F島的核電站孵运,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蔓彩。R本人自食惡果不足惜治笨,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一驳概、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旷赖,春花似錦顺又、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至流济,卻和暖如春锐锣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绳瘟。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工雕憔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人糖声。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓斤彼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蘸泻。 傳聞我的和親對象是個殘疾皇子琉苇,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 題目1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i悦施。使用 兩種以上的方法 題目2: 封裝一個...
    peaceChierdo閱讀 244評論 0 0
  • 題目1: 下面的代碼輸出多少并扇?修改代碼讓 fnArr[i]() 輸出 i。使用 兩種以上的方法 var fnArr...
    saintkl閱讀 357評論 0 0
  • 題目1: 下面的代碼輸出多少抡诞?修改代碼讓 fnArri 輸出 i穷蛹。使用 兩種以上的方法 方法一: 方法二: 方法三...
    南山碼農(nóng)閱讀 280評論 0 1
  • 1: 下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i昼汗。使用 兩種以上的方法 方法1:聲明個函數(shù)肴熏,創(chuàng)...
    曉風殘月1994閱讀 382評論 0 0
  • 1.下面的代碼輸出多少?修改代碼讓 fnArr[i]() 輸出 i顷窒。使用 兩種以上的方法 2.封裝一個汽車對象蛙吏,可...
    liushaung閱讀 178評論 0 2