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

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

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

前言

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

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

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

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

結(jié)果:true

解釋:
!的優(yōu)先級比==高,所以先計(jì)算!,右邊得到false(對象轉(zhuǎn)布爾永遠(yuǎn)是true,取反得到false)
現(xiàn)在計(jì)算[] == false,js進(jìn)行比較時(shí)要先轉(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

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

3.閉包實(shí)戰(zhàn)

面試場景:面試官問“你寫過防抖嗎?”這不僅僅是考代碼,是考你對閉包的應(yīng)用。
場景描述:用戶在搜索框瘋狂打字,每打一個(gè)字就發(fā)一次 API 請求,服務(wù)器炸了。你需要做一個(gè)機(jī)制:等用戶停手 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 變量應(yīng)該被垃圾回收銷毀。
神奇之處:但因?yàn)榉祷氐哪莻€(gè)新函數(shù)引用了 timer,所以 timer 被迫留在了內(nèi)存里。
實(shí)際效果:每次你打字調(diào)用這個(gè)返回的函數(shù),它們訪問的都是同一個(gè) timer。這就是閉包最大的作用——保存狀態(tài)。

4.事件冒泡

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

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

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

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賦值的變量會(huì)被提升到頂層,此時(shí)它在函數(shù)內(nèi)部,但是聲明被提升到了頂層,因此name在外面就變成了undefined,所以進(jìn)入了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 先準(zhǔn)備好,指向了堆內(nèi)存中 {n:1} 這個(gè)對象的一個(gè)新屬性 x(此時(shí)為undefined),然后a = { n: 2 } 執(zhí)行,變量 a 的指針變了,指向了新對象。最后執(zhí)行賦值,把 {n:2} 賦給第一步中準(zhǔn)備好的那個(gè) x。但是b 依然指向舊對象(現(xiàn)在舊對象變成了 {n:1, x: {n:2}}),而 a 指向了新對象 {n:2}(新對象里沒有 x)。

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

題目:下面代碼會(huì)打印什么

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

結(jié)果:
11
0

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

8.JSON鍵的理解

題目:下面代碼會(huì)打印什么

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

結(jié)果:c

解釋:因?yàn)閖son的鍵名只能是字符串,所以a[c]實(shí)際上是添加了一個(gè)‘123’:‘c’。打印自然也是c

9. 原型鏈

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

function Foo() {
  Foo.a = function() { console.log(1) }; // 靜態(tài)方法
  this.a = function() { console.log(2) }; // 實(shí)例方法
}
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 出來的實(shí)例 obj。查找屬性遵循:實(shí)例自身 -> 原型鏈。因?yàn)闃?gòu)造函數(shù)里 this.a 給實(shí)例自身加了方法,所以直接執(zhí)
行,打印 2。如果構(gòu)造函數(shù)里沒寫 this.a,才會(huì)去原型上找打印 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é)合了遞歸。如果當(dāng)前項(xiàng)是數(shù)組,就遞歸調(diào)用 flatten,否則直接拼接到結(jié)果里。
注:ES2019 直接出了 arr.flat(Infinity),但在面試中手寫遞歸依然是加分項(xiàng)。

總結(jié)

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

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

相關(guān)文章

  • ES6 Set結(jié)構(gòu)的應(yīng)用實(shí)例分析

    ES6 Set結(jié)構(gòu)的應(yīng)用實(shí)例分析

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

    webpack自動(dòng)化打包方式詳解

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

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

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

    innerText innerHTML的用法以及注意事項(xiàng) [推薦]

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

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

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

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

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

    js和css寫一個(gè)可以自動(dòng)隱藏的懸浮框

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

    JavaScript、tab切換完整版(自動(dòng)切換、鼠標(biāo)移入停止、移開運(yùn)行)

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

    three.js中文文檔學(xué)習(xí)之如何本地運(yùn)行詳解

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

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

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

最新評論

定陶县| 宁城县| 芜湖市| 乐昌市| 贵溪市| 涞水县| 台北县| 永州市| 新郑市| 关岭| 永仁县| 衢州市| 新源县| 竹北市| 光山县| 古浪县| 蓬安县| 泊头市| 安阳市| 涪陵区| 应用必备| 惠来县| 米林县| 临江市| 无为县| 甘洛县| 察哈| 三门峡市| 安多县| 景谷| 满洲里市| 胶南市| 福州市| 万安县| 海阳市| 涟源市| 天门市| 永春县| 黄山市| 昌图县| 杭锦后旗|