求助,這幾道面試題有些我回答不出來了

前端小智發表於2022-03-30

有夢想,有乾貨,微信搜尋 【大遷世界】 關注這個在凌晨還在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收錄,有一線大廠面試完整考點、資料以及我的系列文章。

問題1:下面程式碼輸出結果是什麼

let object_1 = { name: '小智' }
let object_2 = object_1
object_1.name = '王大志'
console.log(object_2)

輸出

{ name: '王大志' }

原因:我們可以看到,在傳遞非原始資料型別時,分配運算子直接傳遞地址(引用)。因此,非原始資料型別總是通過引用來傳遞。

問題2:下面程式碼輸出結果是什麼

var a = 10
var show = function () {
  console.log(a)
  a = 20
}
show()

輸出 10

原因:作用域提升

問題3:下面程式碼輸出結果是什麼

console.log(name)
hello()
function hello() {
  console.log('你的名字')
}

var name = '小智'

輸出:

undefined
你的名字

懵了,為啥是undefined ,沒搞懂,有知道答案的嗎?

問題4:下面程式碼輸出結果是什麼

let x = true
setTimeout(() => {
  x = false
})
while (x) {
  console.log('hello')
}

輸出

無限列印 'hello'

原因是什麼?我們知道 SJ 是一種單執行緒語言,setTimeout是一個非同步操作,所以它會進入任務佇列並等待執行的機會。

因為 xtrue,所以會進入 "while迴圈",它將連續列印 "hello",2秒後,setTimeout準備執行,但呼叫棧不是空的,它已經在執行 while 迴圈,所以 setTimeout 不會得到任何執行機會。

問題5:下面程式碼輸出結果是什麼

let x = true
let count = 0
setTimeout(() => {
  x = false
}, 2000)
setInterval(() => {
  if (x) {
    console.log(count++)
  }
}, 200)

輸出:

0
1
2
3
4
5
6
7
8

原因:setTimeoutsetInterval 是一個非同步操作,所以首先,它呼叫 setInterva
,而 setInterval 將每隔 200 毫秒列印一次 count 值,然後在2秒後 setTimeout
將被呼叫,此時 x 被更改為 falsesetInterval條件不滿足,所以不會在列印 count 的值,然後繼續往下執行。

程式碼部署後可能存在的BUG沒法實時知道,事後為了解決這些BUG,花了大量的時間進行log 除錯,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug

交流

有夢想,有乾貨,微信搜尋 【大遷世界】 關注這個在凌晨還在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收錄,有一線大廠面試完整考點、資料以及我的系列文章。

相關文章