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

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

image

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

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

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

Javascript 中的閉包是什么?

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

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

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

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

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

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

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

Javascript中的 DOM 是什么

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

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

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

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

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

Javascript 的 Promise 是什么

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

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

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

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

Javascript 中的原型是什么?

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

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

來看看事例:

function Animal(name, kind, age) {
  this.name = name;
  this.kind = kind;
  this.age = age;
}

Animal.prototype.ownerName('Mark');

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

Javascript 的 變量提升 是什么

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

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

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

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

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

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

Javascript中的對象是什么

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

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

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

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

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

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

Javascript 中的函數(shù)是什么

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

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

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

calculate(2, 5);

Javascript中的純函數(shù)是什么

如果函數(shù)的調用參數(shù)相同,則永遠返回相同的結果。它不依賴于程序執(zhí)行期間函數(shù)外部任何狀態(tài)或數(shù)據(jù)的變化,必須只依賴于其輸入?yún)?shù)。

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

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

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

Javascript中的構造函數(shù)是什么

構造函數(shù)是一種特殊的方法,用于初始化和創(chuàng)建 Javascript 中的對象。

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

在構造函數(shù)內部,this 指向新創(chuàng)建的對象 Object。 這個新創(chuàng)建的對象的 prototype 被指向到構造函數(shù)的 prototype

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

const Person = (name, age) => {
  this.name = name;
  this.age = age;
}

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

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

Javascript類是什么?

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

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

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

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

總結

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

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

作者:Duomly

更多編程相關知識,請訪問:編程視頻!!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容