盤點7個簡單但棘手的JavaScript面試問題分析
1. 意外全局變量
問題: 在下面的代碼中,我們想要分別輸出變量 a
和 b
的類型:
function foo() { let a = b = 0; a++; return a; } foo(); typeof a; // => ??? typeof b; // => ???
分析: 這段代碼引發(fā)了一個常見的陷阱:意外創(chuàng)建的全局變量。在函數(shù) foo()
中,我們聲明了變量 a
,但 b
并沒有使用 let
或 const
進(jìn)行聲明。因此,b
變成了全局變量,而不是局部變量。
因此,typeof a
返回 'undefined'
,因為變量 a
是 foo()
函數(shù)內(nèi)的局部變量,而 typeof b
返回 'number'
,因為變量 b
成為了全局變量。
2. 數(shù)組的 length 屬性
問題: 下面的代碼中,我們嘗試清空一個數(shù)組 clothes
,然后訪問 clothes[0]
。它的值會是什么?
const clothes = ['jacket', 't-shirt']; clothes.length = 0; clothes[0]; // => ???
分析: 這個問題涉及到JavaScript中數(shù)組的 length
屬性。當(dāng)我們將數(shù)組的 length
設(shè)置為 0
時,實際上是在刪除數(shù)組的所有元素。因此,clothes[0]
的值是 undefined
,因為數(shù)組已被清空。
3. 鷹眼測試
問題: 下面的代碼嘗試在數(shù)組 numbers
中添加一些數(shù)字。numbers
的內(nèi)容會是什么?
const length = 4; const numbers = []; for (var i = 0; i < length; i++); { numbers.push(i + 1); } numbers; // => ???
分析: 這個問題涉及到JavaScript中常見的for
循環(huán)陷阱。在 for
循環(huán)的末尾存在一個意外的分號 ;
,導(dǎo)致循環(huán)體未執(zhí)行。因此,numbers
數(shù)組將為空,其內(nèi)容是 []
。
4. 自動分號插入
問題: 下面的函數(shù) arrayFromValue()
接受一個參數(shù),并將其放入數(shù)組中。它的返回值是什么?
function arrayFromValue(item) { return [item]; } arrayFromValue(10); // => ???
分析: 這個問題涉及到JavaScript中自動分號插入的行為。由于在 return
語句和數(shù)組 [item]
之間存在換行符,JavaScript會自動插入分號,將函數(shù)的返回值視為 undefined
。因此,arrayFromValue(10)
的返回值是 undefined
。
5. 經(jīng)典問題:棘手的閉包
問題: 下面的代碼嘗試在一個for
循環(huán)中使用閉包來記錄不同的值。它將輸出什么到控制臺?
let i; for (i = 0; i < 3; i++) { const log = () => { console.log(i); } setTimeout(log, 100); }
分析: 這個問題涉及到JavaScript中的閉包和作用域。盡管我們可能期望輸出是 0
、1
和 2
,但實際上它會輸出 3
、3
和 3
。這是因為 log
函數(shù)是一個閉包,它捕獲了變量 i
的最終值,而不是在每次迭代中的值。
6. 浮點數(shù)計算
問題: 下面的等式檢查兩個浮點數(shù)的相等性。它們相等嗎?
0.1 + 0.2 === 0.3 // => ???
分析: 這個問題涉及到JavaScript中浮點數(shù)的精度問題。盡管我們可能期望 0.1 + 0.2
等于 0.3
,但實際上它返回 false
。這是因為在二進(jìn)制表示中,這些浮點數(shù)相加會產(chǎn)生舍入誤差。
7. 變量提升
問題: 如果在變量聲明前訪問變量 myVar
和 myConst
,會發(fā)生什么?
myVar; // => ??? myConst; // => ??? var myVar = 'value'; const myConst = 3.14;
分析: 這個問題涉及到JavaScript中的變量提升和臨時死區(qū)。在聲明前訪問 myVar
會返回 undefined
,因為變量 myVar
在聲明前已經(jīng)提升,但尚未初始化。而在聲明前訪問 myConst
會引發(fā) ReferenceError
,因為 const
聲明具有臨時死區(qū),直到聲明行之后才能訪問。
以上就是盤點7個簡單但棘手的JavaScript面試問題分析的詳細(xì)內(nèi)容,更多關(guān)于JavaScript面試問題分析的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript實現(xiàn)小球沿正弦曲線運(yùn)動
這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)小球沿正弦曲線運(yùn)動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12springMvc 前端用json的方式向后臺傳遞對象數(shù)組方法
今天小編就為大家分享一篇springMvc 前端用json的方式向后臺傳遞對象數(shù)組方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08js location.replace與location.reload的區(qū)別
js location.replace與location.reload的區(qū)別,經(jīng)常能用的到,需要的朋友可以可以下。2010-09-09