前端笔试题小结(一)
前端筆試題小結(一)
2020-03-13
題目一:
將一個js數組去重。
樣例:
輸入:[ 1, “apple”, 3, “a”, 3, 1, 5, 6, “a”, 4 ]
輸出:[ 1, “apple”, 3, “a”, 5, 6, 4 ]
分析1:
將兩個數組循環嵌套一個個的比較是否相等,如果此元素沒有雷同,則把它放入新的數組中。
分析2:
將一個數組中的元素進行排序,然后對前后元素進行比較,結果放入新的數組中。
其中,let主要定義塊級變量,只在定義的區域內有效。var定義全局變量或函數變量。
js的三等于號和雙等于號區別:雙等于號屬于一般比較,可以自動轉化數據類型,三等于號表示恒等于,比較的兩邊要絕對的相同先判斷類型,如果不是同一類型直接為false。
更新:
2020-03-14
題目二:
問:
1.變量i,s,a在堆還是在棧中?
2.第8行執行完后a.i的值是什么?
答案:
(1) i,s,a在棧中,new出來的對象A在堆上。
(2) 執行完后a.i的值還是字符串op。
解析:
1、考察js堆與棧:棧內存主要用于存儲各種基本類型的變量,包括Boolean、Number、String、Undefined、Null以及對象變量的指針,堆主要存儲object
所以字符串變量i,s以及對象指針a都存在棧中,new出來的對象開辟內存存在堆上,對應地址是指針a存的內容
2、考察參數傳遞按值傳遞:a是A類的實例,所以a.i=‘op’,a.func(a.i)這句執行函數,把a.i作為參數傳遞,該函數會復制一個變量,兩個變量完全獨立,所以在函數體里只是把復制的那個變量(一個新的局部變量)改變為’op9’,在函數體外的a.i并沒有被改變
題目三:
請按順序寫出打印結果,并說明原因。
答案:foo,foo2,global
解析:
‘foo’ //bind返回一個函數,該函數體中的this綁定到window上,然后new對該函數進行構造調用,返回一個新對象,函數體中的this指向該對象。bind是硬綁定,new綁定的優先級高于硬綁定。所以this還是綁定在bar這個新對象上。this.name='foo’就是bar.name=‘foo’
‘foo2’ //復雜類型值地復制是引用復制,bar3、bar2和bar指向的都是同一個對象,所以bar2.name='foo2’對對象的屬性進行修改時,bar3和bar的數據同樣收影響
‘global’ //setTimeout設置一個定時器,定時器到時后調用回調函數,但定時器到時后只能將回調的執行放到事件隊列的末尾,不能插隊,所以console.log(window.name)這條輸出語句是最后執行的
總結
以上是生活随笔為你收集整理的前端笔试题小结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给磁盘加个背景
- 下一篇: HTML的xmlns的作用