有夢想,有乾貨,微信搜尋 【大遷世界】 關注這個在凌晨還在刷碗的刷碗智。
本文 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是一個非同步操作,所以它會進入任務佇列並等待執行的機會。
因為 x
為 true
,所以會進入 "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
原因:setTimeout
和 setInterval
是一個非同步操作,所以首先,它呼叫 setInterva
。
,而 setInterval
將每隔 200 毫秒列印一次 count
值,然後在2秒後 setTimeout
將被呼叫,此時 x
被更改為 false
。setInterval
條件不滿足,所以不會在列印 count
的值,然後繼續往下執行。
程式碼部署後可能存在的BUG沒法實時知道,事後為了解決這些BUG,花了大量的時間進行log 除錯,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug。
交流
有夢想,有乾貨,微信搜尋 【大遷世界】 關注這個在凌晨還在刷碗的刷碗智。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收錄,有一線大廠面試完整考點、資料以及我的系列文章。