基本 JavaScript 面试问题
大家好!今年我参加了几个 JavaScript 软件开发职位的面试,我觉得有必要写一篇文章,介绍一下我面试时遇到的一些问题。
在这篇文章里,我会分享一些面试问题以及它们的答案。
解释数据结构
数据结构是一种数据组织、管理和存储格式,旨在实现高效的访问和修改。数据结构是数据值、数据值之间的关系以及可应用于数据的函数或操作的集合。
简而言之,数据结构是一种存储和管理数据集合的定义格式/方式。
列出数据结构的例子,解释并实现一个
一些常见的数据结构包括:
- 大批
- 链接列表
- 双向链表
- 堆
- 队列
- 哈希图
- ETC
我将解释并实现一个堆栈。
栈是一种线性数据结构,以后进先出 (LIFO) 的方式存储数据,即最后添加/插入的数据项最先被访问。栈中的数据只能从一端(栈顶)访问。
栈数据结构仅支持两种操作,即PUSH
插入/添加数据项和POP
删除/移除数据项。
执行
class Stack {
constructor() {
this.top = -1;
this.store = [];
}
pop = () =>{
if(this.top<0){
return null;
}
let poppedItem = this.store[this.top];
this.store.length = --this.top+1;
return poppedItem;
}
push = (item)=>{
this.store[++this.top] = item;
return;
}
getTop = ()=>{
return this.store[this.top];
}
}
let myStack = new Stack();
myStack.push("10");
myStack.push("34");
myStack.push("17");
console.log(myStack.getTop());//output 17
console.log(myStack.pop());
console.log(myStack.getTop());//output 34
用代码示例解释闭包
闭包是指即使在父函数关闭后,仍可访问父作用域的函数。
实现
var add = (function(){
let accumulator = 0;
return function(value){
return accumulator+=value;
}
})();
console.log(add(3)); //output 3
console.log(add(5)); //output 8
console.log(add(7)); //output 15
闭包使得函数可以拥有私有变量。例如,在上面的代码中,accumulator
即使匿名函数执行完毕,匿名函数返回的函数仍然可以访问该变量。
通过代码示例解释 JavaScript 中的异步性
JavaScript 是单线程的,这意味着代码是顺序/同步执行的(一行接一行)。异步 JavaScript 允许代码执行而不阻塞主线程,即代码执行时不会阻塞/停止其他代码在其仍在运行/执行时立即执行。
代码示例
console.log("start");
new Promise((resolve,reject)=>{
resolve({data:'hello world'});
}).then(res=>{
console.log(res);
})
console.log("end");
//outputs
//start
//end
//{ data: 'hello world' }
在上面的代码中,即使先开始执行console.log("end")
, 也会在 之前执行。这是因为是异步的,并且没有阻塞主线程,因此允许在 执行时执行。promise
promise
promise
console.log("end")
解释高阶函数。
高阶函数是将其他函数作为参数的函数和/或返回函数的函数。
代码示例
function logger(){
console.log("Hello world!");
}
setTimeOut(logger,2000);
上面setTimeOut
是一个更高级的其他函数,它将该函数logger
作为参数。
结论
希望这篇文章对你有帮助,并能帮助你准备面试。
如果你喜欢这篇文章,欢迎随时联系我,在推特上关注我。