web前端面試題整理后篇(程序篇)

1. var obj = {a : 1}; (function (obj) { obj = {a : 2}; })(obj);? ?? ? //問obj的值會改變嗎晋涣?

var obj = {a : 1};

(function (obj) {

????obj = {a : 2};

})(obj);

//問obj的值會改變嗎澈段?

外部的obj不變.
因為匿名函數(shù)中obj傳入?yún)?shù)等于是創(chuàng)建了一個局部變量obj, 里面的obj指向了一個新的對象 . 如果改成(function () { obj = {a : 2}; })(obj);??就會改變了


2. var obj = { a:1,??func: function() { (function () { a=2; }(); }} ; obj.func()? ?? ? //obj中a的值會改變嗎? 匿名函數(shù)里的this指向的是什么?

var obj = {

????a:1, ?

????func: function() {

????????(function () {

????????????a=2;

????????}();

????}

} ;

obj.func();

//obj中a的值會改變嗎? 匿名函數(shù)里的this指向的是什么?

obj里的a不會變. 匿名函數(shù)里的this指向全局對象window.??這等于是給window加了一個名為a的屬性
要改變obj中a的值 , 應(yīng)當(dāng):

(function() {

????this.a = 2

}).call(this);

或者obj中定義?

func: function() {

????var self = this;

????(function(){

????????self.a=2;

})();}

3. 要實現(xiàn)函數(shù)內(nèi)每隔5秒調(diào)用自己這個函數(shù)窑滞,100次以后停止令宿,怎么辦?

(function(){

var index = 0;

function fn(){

if(index < 100){

????index++;

????setTimeout(function(){

???? fn();

},5000); ??

??? }

}

fn();

})();

4. 點擊一個ul的五個li元素,分別彈出他們的序號管嬉,怎么做地技?
方法1 :

var oLi = document.getElementsByTagName('li');

for(var i=0; i<oLis.length; i++){

????oLis[i].onclick = (function(j){

????????return function(){

????????????alert(j);

????????}

????})(i);

}

方法2:

var oLi = document.getElementsByTagName('li');

for(var i=0; i<oLi.length; i++){

????(function(j){

????????oLi[j].onclick = function(){

????????????alert(j);

????????};

????})(i);

}

方法3:

var oLi = document.getElementsByTagName('li');

for(var i=0; i<oLi.length; i++){

????oLi[i].index = i;

????oLi[i].onclick = function(){

????????alert(this.index);

????}

}

5. js實現(xiàn)數(shù)組去重怎么實現(xiàn)?
方法1.?創(chuàng)建一個新的臨時數(shù)組來保存數(shù)組中已有的元素

var a = new Array(1,2,2,2,2,5,3,2,9,5,6,3);

Array.prototype.unique1 = function(){

????var n = []; ????//一個新的臨時數(shù)組

????for(var i=0; i<this.length; i++){

????????//如果把當(dāng)前數(shù)組的第i已經(jīng)保存進了臨時數(shù)組, 那么跳過

????????if(n.indexOf(this[i]) == -1){

????????????n.push(this[i]);

????????}

????}

????return n;

}

console.log(a.unique1());

方法2.?使用哈希表存儲已有的元素

Array.prototype.unique2 = function(){

????var hash = {},

????????n = []; ????//hash 作為哈希表, n為臨時數(shù)組

????for(var i=0; i<this.length; i++){

????????if(!hash[this[i]]){ ????????//如果hash表中沒有當(dāng)前項

????????????hash[this[i]] = true; ??//存入hash表

????????????n.push(this[i]); ???????//當(dāng)前元素push到臨時數(shù)組中

????????}

????}

????return n;

}

方法3.?使用indexOf判斷數(shù)組元素第一次出現(xiàn)的位置是否為當(dāng)前位置

Array.prototype.unique3 = function(){

????var n = [this[0]];

????for(var i=1; i<this.length; i++) ???//從第二項開始遍歷

????{

????????//如果當(dāng)前數(shù)組元素在數(shù)組中出現(xiàn)的第一次的位置不是i

????????//說明是重復(fù)元素

????????if(this.indexOf(this[i]) == i){

????????????n.push(this[i]);

????????}

????}

????return n;

}

方法4.?先排序再去重

Array.prototype.unique4 = function(){

????this.sort(function(a, b){ return a - b;});

????var n = [this[0]];

????for(var i=1; i<this.length; i++){

????????if(this[i] != this[i-1]){

????????????n.push(this[i]);

????????}

????}

????return n;

}

第一種方法和第三種方法都使用了indexOf(), 這個函數(shù)的執(zhí)行機制也會遍歷數(shù)組
第二種方法使用了一個哈希表, 是最快的.?
第三種方法也有一個排序的復(fù)雜度的計算.
然后做了個測試, 隨機生成100萬個0-1000的數(shù)組結(jié)果如下:

?

第三種方法總是第二種方法的將近兩倍, 而第四種方法與數(shù)組的范圍有關(guān),
如果是0-100的數(shù)組

?

而如果是0-10000, 方法四看著就效果還不錯了

?

而第二種方法永遠(yuǎn)是最好的, 但是是以空間換時間
全部代碼如下

var a = [];

for(var i=0; i<1000000; i++){

????a.push(Math.ceil(Math.random()*10000));

}

?

Array.prototype.unique1 = function(){

????var n = []; ????//一個新的臨時數(shù)組

????for(var i=0; i<this.length; i++){

????????//如果把當(dāng)前數(shù)組的第i已經(jīng)保存進了臨時數(shù)組, 那么跳過

????????if(n.indexOf(this[i]) == -1){

????????????n.push(this[i]);

????????}

????}

????return n;

}

?

Array.prototype.unique2 = function(){

????var hash = {},

????????n = []; ????//hash 作為哈希表, n為臨時數(shù)組

????for(var i=0; i<this.length; i++){

????????if(!hash[this[i]]){ ????????//如果hash表中沒有當(dāng)前項

????????????hash[this[i]] = true; ??//存入hash表

????????????n.push(this[i]); ???????//當(dāng)前元素push到臨時數(shù)組中

????????}

????}

????return n;

}

?

Array.prototype.unique3 = function(){

????var n = [this[0]];

????for(var i=1; i<this.length; i++) ???//從第二項開始遍歷

????{

????????//如果當(dāng)前數(shù)組元素在數(shù)組中出現(xiàn)的第一次的位置不是i

????????//說明是重復(fù)元素

????????if(this.indexOf(this[i]) == i){

????????????n.push(this[i]);

????????}

????}

????return n;

}

?

Array.prototype.unique4 = function(){

????this.sort(function(a, b){ return a - b;});

????var n = [this[0]];

????for(var i=1; i<this.length; i++){

????????if(this[i] != this[i-1]){

????????????n.push(this[i]);

????????}

????}

????return n;

}

var begin1 = new Date();

a.unique1();

var end1 = new Date();

?

var begin2 = new Date();

a.unique2();

var end2 = new Date();

?

var begin3 = new Date();

a.unique3();

var end3 = new Date();

?

var begin4 = new Date();

a.unique4();

var end4 = new Date();

?

console.log("方法一執(zhí)行時間:" + (end1 - begin1));

console.log("方法二執(zhí)行時間:" + (end2 - begin2));

console.log("方法三執(zhí)行時間:" + (end3 - begin3));

console.log("方法四執(zhí)行時間:" + (end4 - begin4));

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柴底,隨后出現(xiàn)的幾起案子婿脸,更是在濱河造成了極大的恐慌,老刑警劉巖柄驻,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狐树,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸿脓,警方通過查閱死者的電腦和手機抑钟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來野哭,“玉大人在塔,你說我怎么就攤上這事〔η” “怎么了蛔溃?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長篱蝇。 經(jīng)常有香客問我贺待,道長,這世上最難降的妖魔是什么态兴? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任狠持,我火速辦了婚禮,結(jié)果婚禮上瞻润,老公的妹妹穿的比我還像新娘如暖。我一直安慰自己庭呜,他們只是感情好顿天,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布蜻韭。 她就那樣靜靜地躺著,像睡著了一般傻铣。 火紅的嫁衣襯著肌膚如雪章贞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天非洲,我揣著相機與錄音鸭限,去河邊找鬼蜕径。 笑死,一個胖子當(dāng)著我的面吹牛败京,可吹牛的內(nèi)容都是我干的兜喻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼赡麦,長吁一口氣:“原來是場噩夢啊……” “哼朴皆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泛粹,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤遂铡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晶姊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扒接,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年帽借,在試婚紗的時候發(fā)現(xiàn)自己被綠了珠增。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡砍艾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出巍举,到底是詐尸還是另有隱情脆荷,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布懊悯,位于F島的核電站蜓谋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炭分。R本人自食惡果不足惜桃焕,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捧毛。 院中可真熱鬧观堂,春花似錦、人聲如沸呀忧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽而账。三九已至胰坟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泞辐,已是汗流浹背笔横。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工竞滓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吹缔。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓商佑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涛菠。 傳聞我的和親對象是個殘疾皇子莉御,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

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