記一次面試

2022-08-09 15:39:23 字數 1452 閱讀 1821

最近面試經常碰到這樣一道題(或者類似):ps.因為我阿姨不會就詳細分析吧。

var btns = document.getelementsbyclassname('btn');

for(let i = 0; i < btns.length; i++)

}

這個之前說過,因為面試的時候,說了主要看閉包。所以也沒有多想。

function fun(),0); 

}}fun();

其實,通過分析就不難看出,核心點問題都是, 在乙個迴圈內,延時列印迴圈變數。 所有的結果一樣。

因為js的變數有提公升作用,所以可以將程式改成成更加直觀的形式。

var i = 0; 

function fun(),1000);

i++; // 這裡訪問的i 也是 之前定義的 i

}}fun();

我們改成程式之後,就可以看到了。 列印語句的i,因為都是在等待i變換之後,取i值列印, 所以結果一樣。

這裡產生問題的原因在於:

for語句不會像其他語言具有塊級作用域(也是js變數宣告提公升)。

所有的訪問迴圈變數的值,都是延時訪問了。

訪問的i都指向同乙個i。

其實,核心問題,就是等待迴圈結束,才去訪問i,而且訪問的是同乙個i。

解決思路:兩種 改變訪問時機, 改變訪問變數。

for( var i = 0; i < 5; i++)
這樣做好像沒什麼意義。

讓for語句具有塊級作用域

這是es6的語法規則: 使用let. (這是最簡單的一種形式)

function fun(),0); 

}}fun();

用let代替var來宣告變數,就可以把變數的作用域限制在當前**塊中也就是{}

使用閉包

函式是具有自己的作用域的。在es6之前,都是使用閉包來實現塊作用域

function fun()

})(i),0);

}}fun();

其實, 也就是用 立即執行函式引數i_ 來儲存 i 值 。 當然你也可以把i_寫成i。

分割線(這對之前問題的處理)

使用settime呼叫時候可以傳遞引數的特性。

難道之前面試問我的是這麼做?

function fun()); // 這個是立即執行

promise.then(function(value)) }}

fun();

下面**也可以實現,其實,你就會發現, 這是因為 settimeout 函式 可以呼叫給函式傳遞引數的原因, 。

function fun(),0,i); 	}}

fun();

記一次面試

1 給定乙個字串str,怎麼判斷它是否是乙個陣列arr的鍵名?array keys exists str,arr 2 dns協議怎麼工作的?dns是應用層協議 實現ip與網域名稱的對映,將網域名稱轉成對應的ip位址。3 怎樣判斷乙個陣列是否為空?count arr 和empty arr 4 開啟檔案...

記一次實習面試

今天去面試。有點遲,約好10點,遲了10分鐘左右,估計給人印象不太好,這裡提醒自己下次早點到。這次面試的一間公司,叫會掌櫃,0,0其實不知道叫拓源新思覺還是叫會掌櫃,看了他們會掌櫃這個 感覺挺新穎的,會務服務的一條龍服務。辦公在光大銀行大廈707,附近地鐵3號線,華師c出口左轉過馬路就是了。辦公環境...

記一次面試經歷

今早七點半的巴士從中山趕到廣州面試php開發助理,以前面的都是十來人 幾十人的小公司,不少還是培訓公司,坑的一逼!這次的公司不錯,比較正規,好歹上百人了,只是筆試題做得一般,題目有的雖有學過,但忘了,好吧!這就是沒準備充分的緣故!下面羅列下我還記得的題目 有些漏了就沒辦法了 之後hr面試聊了下,雖然...