成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

7個簡單但棘手的JavaScript面試問題

開發 前端
在這篇文章中,你會發現7個乍一看很簡單但很棘手的JavaScript面試問題。

[[318982]]

如果您符合高級開發人員的資格,其工作涉及JavaScript,那么在編碼面試中很有可能會被問到棘手的問題。

遵循這個建議:“熟能生巧”。深入有規律地學習JavaScript將提高您的編碼能力,并且可以提高您的面試技巧。

在這篇文章中,你會發現7個乍一看很簡單但很棘手的JavaScript面試問題。

雖然一開始這些問題看起來是隨意的,但是它們試圖與JavaScript的重要概念掛鉤。所以你最好在下次面試前練習一下!

1. 意外全局變量

Question

以下代碼段中用于運算 typeof a 和 typeof b 的內容: 

  1. function foo() {  
  2.   let a = b = 0;  
  3.   a++;  
  4.   return a;  
  5.  
  6. foo();  
  7. typeof a; // => ???  
  8. typeof b; // => ??? 

Answer

讓我們看一下第2行:let a = b = 0,該語句聲明一個局部變量a,然兒,它也聲明了全局變量b。

在 foo() 范圍或全局范圍中都沒有聲明變量b。因此JavaScript將 b = 0 表達式解釋為 window.b = 0。換句話說,b是意外創建的全局變量。

在瀏覽器中,以上代碼片段等效于: 

  1. function foo() {  
  2.   let a;  
  3.   window.b = 0 
  4.   a = window.b;  
  5.   a++;  
  6.   return a;  
  7.  
  8. foo();  
  9. typeof a;        // => 'undefined'  
  10. typeof window.b; // => 'number' 

typeof a 等于 'undefined',變量 a 存在于 foo() 范圍內,而在外部范圍內不使用。

因為b是一個值為0的全局變量,所以b的類型的值為 'number'。

2.數組的length屬性

Question

clothes[0] 的值是什么? 

  1. const clothes = ['jacket', 't-shirt'];  
  2. clothes.length = 0 
  3. clothes[0]; // => ??? 

Answer

數組對象的 length 屬性具有特殊的行為:減少length屬性的值的副作用是刪除自己的數組元素。因此,當JavaScript執行 clothes.length = 0 的時候將刪除所有元素。

clothes [0] 等于 undefined 的,因為 clothes 數組已被清空。

3.鷹眼測試

Question

numbers 數組的內容是什么? 

  1. const length = 4 
  2. const numbers = [];  
  3. for (var i = 0; i < length; i++);{  
  4.   numbers.push(i + 1);  
  5.  
  6. numbers; // => ??? 

讓我們仔細看一下分號 ; 出現在左大括號 {:

這個分號很容易被忽略,它創建了一個空語句。空語句是不做任何事情的空語句。

for() 在空語句上進行4次迭代(不執行任何操作),而忽略實際將項目推入數組的塊:{number.push(i + 1);}。上面的代碼等效于以下代碼: 

  1. const length = 4 
  2. const numbers = [];  
  3. var i;  
  4. for (i = 0; i < length; i++) {  
  5.   // does nothing  
  6.  
  7. {   
  8.   // a simple block  
  9.   numbers.push(i + 1);  
  10.  
  11. numbers; // => [5] 

for() 將 i 變量遞增到4,然后JavaScript一次進入塊 {number.push(i + 1);},將 4 +1 推入數字數組。

因此,numbers 數組的內容為 [5]。

4.自動分號插入

Question 

  1. arrayFromValue() 返回什么值?  
  2. function arrayFromValue(item) {  
  3.   return  
  4.     [item];  
  5.  
  6. arrayFromValue(10); // => ??? 

Answer

很容易錯過 return 關鍵字和 [item] 表達式之間的換行符。此換行符使JavaScript自動在 return 和 [item] 表達式之間插入分號。

這是等效的代碼,在返回后插入了分號: 

  1. function arrayFromValue(item) {  
  2.   return;  
  3.   [item];  
  4.  
  5. arrayFromValue(10); // => undefined 

return; 函數內部使其返回 undefined。因此 arrayFromValue(10) 的值為 undefined。

5.經典問題:棘手的閉包

Question

以下代碼將輸出什么到控制臺? 

  1. let i;  
  2. for (i = 0; i < 3; i++) {  
  3.   const log = () => {  
  4.     console.log(i);  
  5.   }  
  6.   setTimeout(log, 100);  

Answer

如果您以前從未聽說過這個棘手的問題,則很可能您的答案是 0、1 和 2:這是錯誤的。當我第一次嘗試解決它時,這也是我的答案!

執行此代碼段有兩個階段。

Phase 1

  1.  for() 重復3次,在每次迭代過程中,都會創建一個新的函數 log() 來捕獲變量 i。然后 setTimout() 計劃執行log()。
  2.  當 for() 循環完成時,i 變量的值為 3。

log() 是一個捕獲變量 i 的閉包,該變量在 for() 循環的外部范圍中定義。請務必注意,閉包可以詞法捕獲 i 變量。

Phase 2

第二階段發生在100ms之后:setTimeout() 調用了3次計劃的 log() 。log() 讀取變量i的當前值為3,并記錄到控制臺3。這就是為什么控制臺輸出為3、3 和 3 的原因。

如果您難以理解閉包,建議閱讀“ JavaScript閉包的簡單說明”。

您知道如何將代碼段記錄為0、1和2嗎?請在下面的評論中寫下您的解決方案!

6.浮點數計算

Question

這個等式的結果是什么? 

  1. 0.1 + 0.2 === 0.3 // => ??? 

Answer

首先,讓我們看一下 0.1 + 0.2 的值: 

  1. 0.1 + 0.2; // => 0.30000000000000004 

0.1 和 0.2 的總和不完全是 0.3,而是略高于 0.3。

由于以二進制方式對浮點數進行編碼,因此像浮點數相加之類的操作會產生舍入誤差。

簡而言之,直接比較浮點數并不精確。

因此 0.1 + 0.2 === 0.3 的結果是 false。

點擊 0.30000000000000004.com 了解更多信息。

7.變量提升

Question

如果在聲明前訪問 myVar 和 myConst,會發生什么情況? 

  1. myVar;   // => ???  
  2. myConst; // => ???  
  3. var myVar = 'value' 
  4. const myConst = 3.14; 

Answer

提升和臨時死區是影響JavaScript變量生命周期的兩個重要概念。

在聲明之前訪問 myVar 的結果為 undefined。在初始化之前,提升的 var 變量具有 undefined 的值。

然兒,在聲明行之前訪問 myConst 會引發 ReferenceError。const 變量處于臨時死區,直到聲明行 const myConst = 3.14。

8.最后...

您可以認為某些問題對面試毫無用處。我有同樣的感覺,特別是關于鷹眼測試。盡管如此,他們可能會被問到。

無論如何,其中許多問題都可以真正評估您是否精通JavaScript,例如棘手的閉包。如果您在閱讀帖子時遇到一些困難,這很好地表明了您接下來必須學習什么! 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2023-09-13 08:37:56

程序員面試catch

2017-09-15 10:36:17

前端JavaScript面試題

2013-12-03 10:11:41

LinuxLinux面試題

2019-12-17 18:11:09

跳槽那些事兒機器學習人工智能

2020-03-23 09:56:50

軟件測試面試技術

2023-09-20 08:03:32

JavaScript編程語言

2018-08-21 13:25:01

編程語言Java面試題

2018-12-10 11:30:06

Openstack面試命令

2015-05-11 14:02:21

JavaJava集合面試問題答案

2024-03-27 08:36:48

JavaScriptWeb開發前端開發

2023-06-27 00:04:10

程序員JavaScript

2020-01-14 10:17:13

深度學習人生第一份工作人工智能

2013-05-22 10:04:18

Hibernate面試問題

2014-02-27 15:42:08

Linux面試

2019-07-19 08:10:47

JavaScript代碼語言

2009-03-03 09:33:13

面試ORACLE

2020-04-16 09:54:39

JavaScript前端技術

2013-09-30 09:08:30

面試創業

2021-02-10 07:38:43

Node.js后端框架

2020-06-16 09:02:36

Linux Shell腳本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本欧美在线 | 97精品国产97久久久久久免费 | 日本精品一区二区三区在线观看 | 中文字幕一区在线观看视频 | 中文福利视频 | 91视频网址 | 中文字幕 国产 | 999视频 | 欧美日韩一区二区视频在线观看 | 亚洲激情一区二区三区 | 日日夜精品视频 | 成人精品一区二区户外勾搭野战 | 午夜一级大片 | 日韩视频免费看 | 欧美 日韩 国产 成人 在线 | 国产在线观看一区二区三区 | 国外成人免费视频 | a亚洲精品| 欧洲一区视频 | 91在线色视频| 色片在线观看 | 国产高清视频在线 | 精品无码久久久久久国产 | 在线免费观看a级片 | 一区二区三区日韩精品 | 99热.com| 国产欧美一区二区三区在线看 | 国产午夜精品一区二区三区嫩草 | 欧美日韩一区二区电影 | 亚洲成人自拍 | 黄网站免费观看 | 欧美亚洲激情 | 日韩一区在线播放 | 天天操网 | 国产九一精品 | 97免费在线视频 | 在线婷婷| av在线天堂 | 国产精品国产三级国产a | 久久亚洲国产精品 | 日韩手机在线视频 |