隨著互聯網應用的不斷增多以及網頁交互需求的提升,JavaScript 已經逐漸成為前端開發必備的技能之一,因此 JavaScript 面試也成為求職者的關鍵之一。在準備 JavaScript 面試中,需要掌握以下幾個點。
1. 異步編程
在 JavaScript 中,異步編程是一種非常重要的編程方式。當一個操作需要等待一段時間后才會完成,常規的方式是使用異步編程。以下是幾種常見的異步編程方式:
// 回調函數 function fetchData(callback){ setTimeout(() => { callback('data') }, 1000) } fetchData(function(data){ console.log(data) }) // Promise function fetchData(){ return new Promise((resolve, reject) => { setTimeout(() => { resolve('data') }, 1000) }) } fetchData().then(data => { console.log(data) }) // async/await async function fetchData(){ return new Promise((resolve, reject) => { setTimeout(() => { resolve('data') }, 1000) }) } async function logData(){ const data = await fetchData() console.log(data) } logData()
2. 閉包
在 JavaScript 中,閉包是一種非常重要的特性,也是函數式編程中的一個核心概念。閉包可以讓我們創建一個函數,該函數可以訪問到外部函數的變量,即使外部函數已經被銷毀。以下是一個例子:
function outerFunc(){ const outerVar = 'outer' function innerFunc(){ console.log(outerVar) } return innerFunc } const innerFunc = outerFunc() innerFunc()
3. 原型鏈
在 JavaScript 中,每個對象都有一個原型對象,這個對象定義了一些通用的屬性和方法。原型鏈是一種用于查找對象屬性的機制,當我們查詢一個對象屬性時,如果該對象不包含該屬性,就會去它的原型對象中查找,如果還沒有找到,那就繼續往原型鏈上查找,直到查找到 Object.prototype 對象為止。以下是一個例子:
function Animal(name){ this.name = name } Animal.prototype.eat = function(food){ console.log(<code>${this.name} eats ${food}</code>) } function Cat(name){ Animal.call(this, name) } Cat.prototype = Object.create(Animal.prototype) Cat.prototype.constructor = Cat Cat.prototype.meow = function(){ console.log('Meow~') } const tom = new Cat('Tom') tom.eat('fish') tom.meow()
4. this 的指向
在 JavaScript 中,this 表示函數執行時所在的上下文對象,它的值在函數執行時才能確定。它的指向可能會受到多種因素的影響,每一種情況都需要根據特定的規則來確定其指向。以下是幾種常見的情況:
// 普通函數調用 function printThis(){ console.log(this) } printThis() // 對象方法調用 const myObj = { name: 'obj', printName(){ console.log(this.name) } } myObj.printName() // 構造函數調用 function Person(name){ this.name = name } const tom = new Person('Tom') console.log(tom.name) // apply/call 調用 function printName(name){ console.log(this.name + name) } const obj = {name: 'obj'} printName.call(obj, 'Tom') printName.apply(obj, ['Tom']) // 箭頭函數 const printThis = ()=>{ console.log(this) } printThis()
5. 作用域
作用域是指變量的可訪問范圍,JavaScript 中的作用域分為全局作用域和函數作用域兩種。在 ES6 中,新增了塊級作用域的概念。
// 全局作用域 const globalVar = 'global' function printGlobalVar(){ console.log(globalVar) } printGlobalVar() // 函數作用域 function printVar(){ const funcVar = 'func' console.log(funcVar) } printVar() // 塊級作用域 if(true){ const blockVar = 'block' console.log(blockVar) }
小結
掌握以上技能可以在 JavaScript 面試中得到更好的表現。除了以上技能,還有許多其他知識點,如事件循環、模塊化等,需要我們不斷地學習和練習。