最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端基礎JS的面試題及答案總結(jié)大全

 更新時間:2026年05月18日 09:18:21   作者:南風知我意957  
作為前端開發(fā),JS是重中之重,最近結(jié)束了面試的高峰期,下面這篇文章主要介紹了前端基礎JS的面試題及答案總結(jié)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

作者最近在往中級前端進發(fā),持續(xù)學習以保證自身競爭力,因此刷了一些面試題,有難有易,因此更一篇博文,與大家共同成長。

1. 隱式類型轉(zhuǎn)換

題目:請問輸出什么?為什么?

console.log([] == ![]);

結(jié)果:true

解釋:
!的優(yōu)先級比==高,所以先計算!,右邊得到false(對象轉(zhuǎn)布爾永遠是true,取反得到false)
現(xiàn)在計算[] == false,js進行比較時要先轉(zhuǎn)換為原始值,左邊轉(zhuǎn)換:[].tostring() = ‘’
現(xiàn)在變成’’ == false
在[]情況下,''和false都是0,所以得到true

2.this 指向

題目:請問輸出什么?

const User = {
  name: '張三',
  sayName: function() {
    console.log(this.name);
  },
  sayNameArrow: () => {
    console.log(this.name);
  }
};

User.sayName();      
User.sayNameArrow(); 

輸出:
張三
undefined

解釋:
這是一個this的指向性問題,sayName由于是function函數(shù),因此它的this指向User,所以打印張三
而sayNameArrow是箭頭函數(shù),箭頭函數(shù)沒有自己的this,所以指向全局,全局對象是沒有name的,因此打印undefined

3.閉包實戰(zhàn)

面試場景:面試官問“你寫過防抖嗎?”這不僅僅是考代碼,是考你對閉包的應用。
場景描述:用戶在搜索框瘋狂打字,每打一個字就發(fā)一次 API 請求,服務器炸了。你需要做一個機制:等用戶停手 500ms 后再發(fā)請求。

function debounce(fn, delay) {
  let timer = null; 
  return function(...args) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

閉包的定義:debounce 函數(shù)執(zhí)行完了,按理說 timer 變量應該被垃圾回收銷毀。
神奇之處:但因為返回的那個新函數(shù)引用了 timer,所以 timer 被迫留在了內(nèi)存里。
實際效果:每次你打字調(diào)用這個返回的函數(shù),它們訪問的都是同一個 timer。這就是閉包最大的作用——保存狀態(tài)。

4.事件冒泡

場景:你需要給一個無限滾動的長列表(比如 10,000 個商品)綁定點擊事件,點擊跳轉(zhuǎn)詳情。

ul.addEventListener('click', function(e) {
  // e.target 是你實際點擊的那個小元素(比如 li 里面的 span)
  // 核心:利用事件冒泡,往上找,看看是不是 li
  if (e.target.tagName === 'LI') {
    console.log('點擊了', e.target.innerText);
  }
});

事件在 DOM 中像泡泡一樣,從最底層的元素(Target)一直往上冒(Bubble)到父元素。 我們只需要像“守門員”一樣站在父元素門口,不管下面誰被點了,泡泡總會冒上來被我抓到。

5.let和var

題目:下面代碼打印什么

var name = 'World';
(function() {
  if (typeof name === 'undefined') {
    var name = 'Jack'; // 注意這里用了 var
    console.log('Goodbye ' + name);
  } else {
    console.log('Hello ' + name);
  }
})();

結(jié)果:Goodbye Jack

var賦值的變量會被提升到頂層,此時它在函數(shù)內(nèi)部,但是聲明被提升到了頂層,因此name在外面就變成了undefined,所以進入了if分支,重新被賦值,從而打印出Goodbye Jack。

6. 連等賦值

題目:下面的代碼輸出什么?

let a = { n: 1 };
let b = a;
a.x = a = { n: 2 };

console.log(a.x);
console.log(b.x);

結(jié)果:
undefined
{ n: 2 }

js中.的優(yōu)先級高于=,因此a.x 先準備好,指向了堆內(nèi)存中 {n:1} 這個對象的一個新屬性 x(此時為undefined),然后a = { n: 2 } 執(zhí)行,變量 a 的指針變了,指向了新對象。最后執(zhí)行賦值,把 {n:2} 賦給第一步中準備好的那個 x。但是b 依然指向舊對象(現(xiàn)在舊對象變成了 {n:1, x: {n:2}}),而 a 指向了新對象 {n:2}(新對象里沒有 x)。

7.類型轉(zhuǎn)換與運算

題目:下面代碼會打印什么

console.log(1 + "1");
console.log(1 - "1");

結(jié)果:
11
0

解釋:加號 (+):如果有一方是字符串,它就變成字符串拼接。1 變成了 “1”。
減號 (-):它會盡最大努力把兩邊都轉(zhuǎn)成數(shù)字進行數(shù)學運算。“1” 變成了數(shù)字 1。

8.JSON鍵的理解

題目:下面代碼會打印什么

var a = {}, b = '123', c = 123;
a[b] = 'b';
a[c] = 'c';
console.log(a[b]);

結(jié)果:c

解釋:因為json的鍵名只能是字符串,所以a[c]實際上是添加了一個‘123’:‘c’。打印自然也是c

9. 原型鏈

題目:下面的代碼打印什么

function Foo() {
  Foo.a = function() { console.log(1) }; // 靜態(tài)方法
  this.a = function() { console.log(2) }; // 實例方法
}
Foo.prototype.a = function() { console.log(3) }; // 原型方法

Foo.a = function() { console.log(4) }; // 覆蓋靜態(tài)方法

Foo.a();
let obj = new Foo();
obj.a();

結(jié)果:
4
2

解釋:Foo.a():調(diào)用的是構(gòu)造函數(shù)上的靜態(tài)屬性。它先被定義打印 1,后被覆蓋打印 4。
obj.a():new 出來的實例 obj。查找屬性遵循:實例自身 -> 原型鏈。因為構(gòu)造函數(shù)里 this.a 給實例自身加了方法,所以直接執(zhí)
行,打印 2。如果構(gòu)造函數(shù)里沒寫 this.a,才會去原型上找打印 3。

10.數(shù)組拍平

場景:把數(shù)組[1, [2, [3, 4]]]變?yōu)椋篬1, 2, 3, 4]

const arr = [1, [2, [3, 4]]];

function flatten(ary) {
  return ary.reduce((pre, cur) => {
    return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
  }, []);
}
console.log(flatten(arr));

解釋:這里結(jié)合了遞歸。如果當前項是數(shù)組,就遞歸調(diào)用 flatten,否則直接拼接到結(jié)果里。
注:ES2019 直接出了 arr.flat(Infinity),但在面試中手寫遞歸依然是加分項。

總結(jié)

今天的面試題就到這里,作為作者的學習記錄,也希望能幫到大家。

到此這篇關(guān)于前端基礎JS的面試題及答案總結(jié)大全的文章就介紹到這了,更多相關(guān)JS基礎面試題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ES6 Set結(jié)構(gòu)的應用實例分析

    ES6 Set結(jié)構(gòu)的應用實例分析

    這篇文章主要介紹了ES6 Set結(jié)構(gòu)的應用,結(jié)合實例形式分析了ES6 set結(jié)構(gòu)的功能、特點、常見用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-06-06
  • webpack自動化打包方式詳解

    webpack自動化打包方式詳解

    這篇文章主要介紹了webpack自動化打包的相關(guān)知識,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-02-02
  • layui.js實現(xiàn)的表單驗證功能示例

    layui.js實現(xiàn)的表單驗證功能示例

    這篇文章主要介紹了layui.js實現(xiàn)的表單驗證功能,結(jié)合實例形式分析了基于layui.js的事件監(jiān)聽、驗證、判定等相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • innerText innerHTML的用法以及注意事項 [推薦]

    innerText innerHTML的用法以及注意事項 [推薦]

    我們常常需要使用另外一些對象的屬性來實現(xiàn)動態(tài)改變其中的文本,它們就是:innerText,outerText,innerHTML,outerHTML,千萬要注意它們的大小寫,因為錯一點您就得不到預期的效果了。
    2009-05-05
  • JavaScrip數(shù)組刪除特定元素的幾種方法總結(jié)

    JavaScrip數(shù)組刪除特定元素的幾種方法總結(jié)

    從js數(shù)組中刪除指定元素是我們每個人都遇到的問題,網(wǎng)上這方面的資料也很多,但有的時間過于久遠,有的內(nèi)容不夠全面,所以自己來整理下,這篇文章主要給大家總結(jié)介紹了關(guān)于JavaScrip數(shù)組刪除特定元素的多種方法,需要的朋友可以參考下。
    2017-09-09
  • 基于JavaScript實現(xiàn)文件共享型網(wǎng)站

    基于JavaScript實現(xiàn)文件共享型網(wǎng)站

    Any?Share?是一種簡單、輕量、快速的文件共享服務。使用?Javascript?編寫,并搭建在?Firebase?平臺。本文將利用它實現(xiàn)創(chuàng)建文件共享型網(wǎng)站,感興趣的可以了解一下
    2022-11-11
  • js和css寫一個可以自動隱藏的懸浮框

    js和css寫一個可以自動隱藏的懸浮框

    用js和css寫一個可以自動隱藏的懸浮框。css肯定是用來控制樣式的,js用來控制器顯示與隱藏的,需要的朋友可以參考下
    2014-03-03
  • JavaScript、tab切換完整版(自動切換、鼠標移入停止、移開運行)

    JavaScript、tab切換完整版(自動切換、鼠標移入停止、移開運行)

    這篇文章主要介紹了JavaScript、tab切換完整版(自動切換、鼠標移入停止、移開運行)的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • three.js中文文檔學習之如何本地運行詳解

    three.js中文文檔學習之如何本地運行詳解

    這篇文章主要給大家介紹了關(guān)于three.js中文文檔學習之如何在本地運行的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • 如何用uni-app實現(xiàn)頂部導航欄顯示按鈕和搜索框

    如何用uni-app實現(xiàn)頂部導航欄顯示按鈕和搜索框

    本文介紹了如何用uni-app實現(xiàn)頂部導航欄顯示按鈕和搜索框,感興趣的同學,可以參考下,并且試驗一下。
    2021-06-06

最新評論

吉水县| 芮城县| 紫阳县| 苏尼特右旗| 乌鲁木齐县| 甘孜县| 长治市| 蕉岭县| 临潭县| 锡林浩特市| 铜陵市| 宜都市| 海宁市| 东海县| 广汉市| 石嘴山市| 灵台县| 武冈市| 资源县| 西丰县| 武川县| 出国| 静乐县| 平遥县| 孝感市| 灵石县| 若尔盖县| 汪清县| 吕梁市| 杭州市| 东丽区| 东台市| 黄山市| 邹城市| 阜宁县| 绥芬河市| 峨眉山市| 利川市| 沭阳县| 锡林郭勒盟| 潍坊市|