記錄乙個面試題目

2022-05-14 09:48:32 字數 1511 閱讀 5396

掘金 上看到的乙個筆試題目,記錄並分析總結以下考察點。

function foo () 

return this

} foo.getname = function ()

foo.prototype.getname = function ()

var getname = function ()

function getname ()

//判斷輸出結果

foo.getname(); // 2

getname(); // 4

foo().getname(); // 1

getname(); // 1

new foo.getname(); // 2

new foo().getname(); // 3

new new foo().getname(); //3

第乙個 不用說什麼,直接呼叫foo建構函式的getname屬性,輸出2。

第二個 呼叫當前作用域下的getname函式,要注意函式表示式函式宣告的不同:

函式宣告會『被提前』到外部指令碼或者外部函式的頂部,所以這種方式宣告的函式,可以在它被定義之前的**中所呼叫。

函式表示式,就和宣告變數一樣了,變數宣告會提前到頂部,但是賦值會在執行到原位置的時候才進行。

4會變數提公升,但是並沒有賦值,然後5函式提公升(在4賦值之前呼叫下getname(),輸出的是5),而**執行4的位置時,會賦值就覆蓋了5。所以第二個會輸出4。

第三個 foo()執行時,foo函式體內並沒有getname變數,所以就去上一層window下找,重新賦值了window下的getname為輸出1(如果沒有找到,會在window下建立乙個getname),然後返回了this,這裡的this指向的是window,再呼叫window的getname屬性,即為重新賦值後的輸出1。

第四個 執行當前作用域下的getname,注意此時getname已經重新賦值,所以輸出1

第五個 這裡需要特別注意表示式的執行順序,詳見 mdn

.無引數列表new執行的優先順序高,所以是new (foo.getname)()輸出2

第六個 同樣是執行順序

().的執行優先順序高,所以是(new foo()).getname(),foo作為建構函式,指定了返回this,而在建構函式中,this指向的是生成的例項,而foo中沒有對例項新增getname屬性,所以在呼叫例項的getname時,會去foo.prototype中找,所以輸出3

第七個 同樣是執行順序

new ((new foo()).getname)()是以原型鏈上的getname為建構函式來執行,輸出3

關於乙個面試題目

曾經碰到乙個面試題目,誰能給出標準答案呢?200個小孩圍乙個圈,從頭開始1到4報數,報到4這個數的退出圓圈,最後乙個留在圈裡的小孩編號是多少?在網上看到很多人給出的答案是 標準答案.public static void main string args while list.size 4 syste...

面試題目記錄2

1.session喜歡丟值且佔記憶體,cookis不安全,請問用什麼辦法代替這兩種原始的方法 回答一 是iis中由於有程序 機制,系統繁忙的話session會丟失,可以用sate server或sql server資料庫的方式儲存session不過這種方式比較慢,而且無法捕獲session的end事...

乙個面試題

題目是 假設乙個 搜尋引擎收錄了2 24首歌曲,並記錄了可收聽這些歌曲的2 30條url,但每首歌的url不超過2 10個。系統會定期檢查這些url,如果乙個url不可用則不出現在搜尋結果中。現在歌曲名和url分別通過整型的song id和url id唯一確定。對該系統有如下需求 1 通過song ...