Lang:简体中文

常见js面试题及答案

日期:2025-09-08 / 来源:面试宝典

涵盖多个考点的实用面试指南

在javascript的面试中,有一些问题是经常被问到的。下面为大家详细介绍一些常见的js面试题及答案。

变量提升问题

变量提升是javascript中一个重要的概念。在函数作用域或全局作用域中,变量和函数的声明会被提升到作用域的顶部。例如:

javascript

console.log(a); // 输出undefined

var a = 10;

这里虽然在使用变量a之后才声明并赋值,但由于变量提升,a的声明被提升到了顶部,只是还没有赋值,所以输出undefined。

作用域问题

javascript中有全局作用域和函数作用域。函数内部可以访问外部作用域的变量,但外部作用域无法访问函数内部的变量。看下面的例子:

javascript

var globalvar = 'global';

function testfunction() {

var localvar = 'local';

console.log(globalvar); // 可以访问全局变量

}

testfunction();

console.log(localvar); // 报错,无法访问局部变量

在这个例子中,函数内部可以访问全局变量globalvar,但在函数外部无法访问函数内部的局部变量localvar。

闭包问题

闭包是指有权访问另一个函数作用域中变量的函数。闭包的一个常见应用场景是实现私有变量。例如:

javascript

function outerfunction() {

var privatevar = 10;

function innerfunction() {

return privatevar;

}

return innerfunction;

}

var closure = outerfunction();

console.log(closure()); // 输出10

在这个例子中,innerfunction就是一个闭包,它可以访问outerfunction作用域中的privatevar变量。

原型链问题

javascript中每个对象都有一个原型对象,原型对象又有自己的原型对象,以此类推,直到最顶层的原型对象object.prototype。当访问一个对象的属性或方法时,javascript会先在对象本身查找,如果找不到,就会沿着原型链向上查找。例如:

javascript

function person(name) {

this.name = name;

}

person.prototype.sayhello = function() {

console.log('hello, ' + this.name);

}

var person = new person('john');

person.sayhello(); // 输出hello, john

在这个例子中,person对象本身没有sayhello方法,但它的原型对象person.prototype有这个方法,所以可以通过原型链调用。

异步编程问题

javascript是单线程的,为了处理异步操作,引入了回调函数、promise、async/await等机制。例如使用promise处理异步操作:

javascript

function asyncoperation() {

return new promise((resolve, reject) => {

settimeout(() => {

resolve('operation completed');

}, 1000);

});

}

asyncoperation().then(result => {

console.log(result); // 输出operation completed

}).catch(error => {

console.error(error);

});

在这个例子中,asyncoperation函数返回一个promise对象,通过then方法处理成功的结果,通过catch方法处理失败的情况。

以下为推荐内容

微信二维码