站長資訊網
最全最豐富的資訊網站

10個開發者經常問的JavaScript面試題(附答案解析)

本篇文章為初學者介紹一下10 個最常被問到的 JavaScript 面試題。有一定的參考價值,有需要的朋友可以參考一下,希望對初學者有所幫助。

10個開發者經常問的JavaScript面試題(附答案解析)

在本文中,我收集了關于Javascript 最常被問到的 10 個問題及其答案。

這10 個問題大多涉及 Javascript 的基礎知識,所以如果你剛剛開始學習 JS,最好理解并掌握它們并。

這個 10 問題涉及 JS 中閉包promise變量提升等等。盡管這些知識不是很難,但是知道答案是一件好事,因為其中一些經常在面試中會被問到。【推薦學習:javascript高級教程】

Javascript 中的閉包是什么?

閉包是封閉在一起的函數的組合,其中內部函數可以訪問其變量和外部函數的變量。

最簡單的解釋方法就是上例子:

function outer() {   var name = 'Maria';   function inner() {     console.log(name);   }   inner(); } outer(); // 'Maria'

在上面的代碼中,你可以看到inner()函數可以訪問其父函數變量name。 因此,如果調用outer()函數,那么inner()函數的console.log()將返回name的值Maria

內部函數可以訪問外部函數參數對象,但是內部函數參數與外部一樣,則內部的參數對象會覆蓋外部的參數對象。如下所示:

function outer(a, b) {   const inner = (a, b) => console.log(a, b);   inner(1, 2); } outer('Alice', 'Mark'); // returns 1, 2

我們使用閉包的主要原因是返回可以返回其他函數的函數。

Javascript中的 DOM 是什么

DOM 是文檔對象模型,它是網站的面向對象的表示形,可以使用 Javascript 進行修改。

使用 JS 可以操縱 DOM 元素,例如顏色,位置,大小。 為了選擇頁面的特定元素,Javascript 提供了一些方法:

  • getElementById() – 通過id屬性選擇一個元素
  • getElementsByName() – 通過name屬性選擇一個元素
  • getElementsByTagName() – 選擇所選標簽的所有元素,
  • getElementsbyClassName() – 選擇特定類名的所有元素

* querySelector() - 通過CSS選擇器選擇元素。

Javascript 還提供了其他操作元素的方法,而不僅僅是獲取元素,比如appendChild()innerHTML()

Javascript 的 Promise 是什么

Promise 是異步編程的一種解決方案,可以替代傳統的解決方案–回調函數和事件。ES6統一了用法,并原生提供了Promise對象。作為對象,Promise 有一下兩個特點: (1)對象的狀態不受外界影響。 (2)一旦狀態改變了就不會在變,也就是說任何時候 Promise 都只有一種狀態。

Promise 有三種狀態,分別是:Pending (進行中), Resolved (已完成), Rejected (已失敗)。Promise 從 Pending 狀態開始,如果成功就轉到成功態,并執行resolve回調函數;如果失敗就轉到失敗狀態并執行reject回調函數。

如果 Promise 被解析(resolved),我們可以調用then()方法并使用返回值執行操作。如果被拒絕(rejected),我們可以使用catch()方法來處理錯誤。

處理異步編程的其他方法還有async/awaitcallbacks

Javascript 中的原型是什么?

原型通常指的是prototype__proto__這兩個原型對象,其中前者叫做顯式原型對象,后者叫做隱式原型對象。

Javascript對象從原型繼承方法和屬性,而Object.prototype在繼承鏈的頂部。Javascript prototype關鍵字還可以用于向構造函數添加新值和方法。

來看看事例:

function Animal(name, kind, age) {   this.name = name;   this.kind = kind;   this.age = age; }  Animal.prototype.ownerName('Mark');

可以看到,通過使用原型,我們能夠將ownerName屬性添加到Animal()構造函數中。

Javascript 的 變量提升 是什么

提升是一種機制,它將所有聲明的變量和函數提升到它們局部作用域的頂部,如果變量和函數被放置在全局作用域,則會被提升到全局作用域的頂部。

Javascript中,可以在變量被使用后在聲明它。

提升用于避免在變量或函數有在沒有定義之前就執行導致的 undefined 錯誤。

name = 'Ted'; console.log(name); var name; // 'Ted'   var name; name = 'Ted'; console.log(name); // 'Ted';

使用 var 聲明的變量,如果沒有賦值,則默認會被初始化為 undefined, letconst 則不會。另外,需要注意的是,在聲明const時,必須同時初始化它,因為后面不可在更改它。

Javascript中的對象是什么

對象只是一種特殊的數據。對象擁有屬性和方法。JavaScript 中的所有事物都是對象,如:字符串、數值、數組、函數等。

對象的屬性:反映該對象某些特定的性質的,如:字符串的長度、圖像的長寬等;

對象的方法:能夠在對象上執行的動作。例如,表單的“提交”(Submit),時間的“獲取”(getYear)等;

屬性只是簡單的值,而方法是可以在對象上執行的操作。

var student = {   firstName: 'Alice',   lastName: 'Jones',   age: 21,   sayHi: () => {     return 'Hi, I am ' + this.firstName;   } }

在上面的代碼中,你可以看到Student對象,其中包含三個屬性和一個方法。

Javascript 中的函數是什么

在javascript中函數是一段可以被執行或調用任意次數的JavasScript代碼,在數據類型中屬于"function"。函數也擁有屬性和方法,因此函數也是對象。

在Javascript中函數定義函數聲明或函數表達式由關鍵字function開始。在定義函數時,可以在函數名后面的括號中添加一些參數。當我們調用函數時,括號中傳遞的值稱為參數。

function calculate(x, y) {   return x * y; }  calculate(2, 5);

Javascript中的純函數是什么

如果函數的調用參數相同,則永遠返回相同的結果。它不依賴于程序執行期間函數外部任何狀態或數據的變化,必須只依賴于其輸入參數。

顧名思義,純函數跟我們初中數學的基本函數一樣,遵循一定的映射關系,輸入決定輸出,一個輸入只能對應一個輸出。不同的輸入可以有相同的輸出,但是相同的輸入不能有不同的輸出

一個函數,如果符合以下兩個特點,那么它就可以稱之為 純函數:

  • 對于相同的輸入,永遠得到相同的輸出
  • 沒有任何可觀察到的副作用

Javascript中的構造函數是什么

構造函數是一種特殊的方法,用于初始化和創建 Javascript 中的對象。

JavaScript 中的構造函數和其它語言中的構造函數是不同的。 通過 new 關鍵字方式調用的函數都被認為是構造函數。

在構造函數內部,this 指向新創建的對象 Object。 這個新創建的對象的 prototype 被指向到構造函數的 prototype

如果被調用的函數沒有顯式的 return 表達式,則隱式的會返回 this 對象,也就是新創建的對象。

const Person = (name, age) => {   this.name = name;   this.age = age; }  var man = new Person('Mark', 23); console.log(man); // { name: 'Mark', age: 23 }

在上面的代碼中,我創建了一個Person構造函數,在下面的代碼中,創建了一個名為man的新變量,并基于Person構造函數創建了一個新對象。

Javascript類是什么?

自從 ES6 引入以來,我們可以在Javascript中使用類。 類是一種函數,我們使用關鍵字class代替function 關鍵字來初始化它。

除此之外,我們還必須在類內部添加constructor()方法,該方法在每次初始化類時都會調用。

constructor()方法內部,我們添加了類的屬性。 要基于現有的類創建另一個類,我們可以使用extends關鍵字。

在JavaScript中使用類的一個很好的例子是 React 框架,它是類的組件。

總結

在本文中,我收集了開發者經常問的 10 個Javascript問題,并給出答案,答案不是唯一,這里只是自己的一些見解,希望本文能給初學者帶來一些幫助。

原文地址:https://dev.to/duomly/10-most-common-javascript-questions-answered-1083

作者:Duomly

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲国产精品xo在线观看| 九九热在线视频观看这里只有精品| 久久99精品久久久久久水蜜桃| 久久亚洲精品成人av无码网站| 中文字幕久久精品| 亚洲国产精品尤物YW在线观看| 中文字幕日韩在线| 国产精品一区二区久久沈樵| 国产精品久久久久久久久久免费| 国产精品大片天天看片| 91精品久久久久| 老司机67194精品线观看| 国产成人精品优优av| 中文成人无码精品久久久不卡| 国产精品网址在线观看你懂的 | 国产精品原创巨作?v网站| 人妻老妇乱子伦精品无码专区| 中文字幕在线观看亚洲日韩| 日韩土豪美女在线视频观看| 国产精品白浆无码流出| 精品国产一区二区三区久久狼 | 精品国产三级a乌鸦在线观看| 夜夜精品无码一区二区三区| 精品人妻一区二区三区四区在线| 亚洲日韩久久综合中文字幕| www.日韩在线| 久久精品无码一区二区三区日韩| 国产在线午夜卡精品影院| 国产精品一区二区三区久久| 国产精品酒店视频免费看| 最新国产午夜精品视频不卡| 国产精品久久久久一区二区三区| 老司机无码精品A| 精品国产这么小也不放过| 国产精品久久久久久一区二区三区| 国产精品久久久久久一区二区三区 | 久久国产精品成人片免费| 久久久无码精品亚洲日韩蜜臀浪潮| 久久亚洲美女精品国产精品 | 国产精品无码一区二区三区不卡| 人人妻人人澡人人爽人人精品浪潮 |