js面试题

1. JavaScript 中的Hoisting是什么?

Hoisting是 JavaScript 中的一种行为,其中变量和函数声明被移动到其作用域的顶部。这意味着可以在代码中声明变量和函数之前使用它们。但是,只会声明,不会赋值。

console.log(x); //undefined

var x = 5;

在这个例子中,变量 x 被提升到范围的顶部,但它的赋值 5 没有,所以当我们尝试记录 x 的值时,它返回 undefined。

2. JavaScript 中的闭包是什么?

闭包是一个函数,即使在外部函数返回之后,它也可以访问其外部范围内的变量。

function outerFunction(x) {

return function innerFunction() {

return x;

}

}

const myClosure = outerFunction(10);

console.log(myClosure()); //10

在此示例中,内部函数 innerFunction 可以从其外部范围访问变量 x,因此,即使在 outerFunction 返回后它也可以返回其值。

3. 讲解JavaScript中的事件冒泡和捕获

事件冒泡和捕获是在 DOM 中传播事件的两种方式。

事件冒泡是指事件首先被最内层元素捕获和处理,然后传播到外层元素。

事件捕获则相反,事件首先由最外层元素处理,然后传播到内部元素。

<div οnclick="alert('div')">

<p οnclick="alert('p')">

Click me!

</p>

</div>

在这个例子中,如果 p 元素被点击,事件将首先被 p 元素捕获并调用 alert('p') 函数。

然后,事件将传播到 div 元素并调用 alert('div') 函数。这是事件冒泡的一个例子。

如果我们在 addEventListener 中使用 useCapture 参数并将其设置为 true,则事件将首先被 div 元素捕获,然后传播到 p 元素。这是一个事件捕获的例子。

4. 用 JavaScript 解释“this”

在 JavaScript 中,this 指的是函数是其方法的对象。

const person = {

name: "John",

sayName: function() {

console.log(this.name);

}

}

person.sayName(); // "John"

在此示例中,this 指的是 person 对象,因此调用 this.name 会返回“John”。this 的值可以根据函数的调用方式而改变。

5. 解释原型继承在 JavaScript 中的工作原理

在 JavaScript 中,所有对象都有一个原型,它们从中继承属性和方法。当在对象上调用属性或方法但在该对象上找不到时,JavaScript 将在对象的原型上查找它。

const animal = {

type: "unknown"

}

const dog = Object.create(animal);

dog.breed = "Golden Retriever";

console.log(dog.type); // "unknown"

console.log(dog.breed); // "Golden Retriever"

在此示例中,狗对象是使用 Object.create() 创建的,它将动物对象设置为其原型。当我们尝试访问 dog 对象的 type 属性时,在 dog 对象本身找不到它,因此 JavaScript 在原型上查找它并在 animal 对象上找到它。

6. 解释 setTimeout 在 JavaScript 中的工作原理

setTimeout 是一个允许您在经过一定时间后执行函数的函数。

console.log("Started!");

setTimeout(() => {

console.log("Hello!");

}, 2000);

console.log("Ended!");

在此示例中,console.log("Started!") 被立即调用,然后 setTimeout 被调用,回调函数记录“Hello!” 和 2000 毫秒的时间。之后立即调用 console.log("Ended!") 。传递给 setTimeout 的回调函数将在 2 秒后调用。

7. 解释 setInterval 在 JavaScript 中的工作原理

setInterval 与setTimeout 类似,但它会以指定的时间间隔重复执行提供的函数。

let count = 0;

const intervalId = setInterval(() => {

console.log(`Interval count: ${count}`);

count++;

if (count === 5) {

clearInterval(intervalId);

}

}, 1000);

在此示例中,提供的函数将每 1000 毫秒(1 秒)执行一次,每次计数都会增加 1。clearInterval 函数用于在 5 次迭代后停止间隔。

8. 解释什么是 JavaScript 中的 promise

Promise 是一个对象,表示异步操作的最终完成(或失败)及其结果值。

const promise = new Promise((resolve, reject) => {

setTimeout(() => {

resolve("Success!");

}, 2000);

});

promise

.then(result => console.log(result))

.catch(error => console.log(error));

在此示例中,使用 setTimeout 函数创建了一个 promise,该函数在 2 秒后调用 resolve 函数。promise 有两个方法,then 和 catch,可用于处理已解析的值或发生的任何错误。

9.解释JavaScript中==和===的区别

==(松散相等)在执行任何必要的类型转换后比较两个值是否相等。===(严格相等)在不执行任何类型转换的情况下比较两个值是否相等。

console.log(0 == false); // true

console.log(0 === false); // false

在此示例中,0 和 false 大致相等,因为它们都是假值,但它们并不严格相等,因为 0 是数字而 false 是布尔值。

通常建议在 JavaScript 中使用 === 进行比较,因为它可以帮助防止意外的类型强制转换。

10.解释JavaScript中let、var、const的区别

let 和 var 用于在 JavaScript 中声明变量,但它们的行为略有不同。let 变量是块作用域的,这意味着它们只能在声明它们的块内访问。

var 变量是函数作用域的,这意味着它们可以在它们声明的整个函数内访问。

if (true) {

let x = 5;

}

console.log(x); // ReferenceError: x is not definedCopy code

if (true) {

var x = 5;

}

console.log(x); // 5

const 用于声明一个常量变量,这意味着它的值在声明后不能重新赋值。

const x = 5;

x = 10; // TypeError: Assignment to constant variable

一般来说,最佳实践是默认使用 const,并且仅在需要重新分配变量时才使用 let。

相关推荐

  1. js面试

    2024-01-19 23:34:02       27 阅读
  2. js面试

    2024-01-19 23:34:02       8 阅读
  3. 面试】Node.js高频面试

    2024-01-19 23:34:02       10 阅读
  4. 从一道 js 面试说下类型转换

    2024-01-19 23:34:02       45 阅读
  5. css、js、vue常考部分面试

    2024-01-19 23:34:02       32 阅读
  6. 前端经典面试js去重方法都有哪些

    2024-01-19 23:34:02       37 阅读
  7. js深拷贝和浅拷贝经典面试都有方法可以实现

    2024-01-19 23:34:02       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-19 23:34:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-19 23:34:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-19 23:34:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-19 23:34:02       18 阅读

热门阅读

  1. 服务器怎么更换cdn?-速盾网络

    2024-01-19 23:34:02       33 阅读
  2. C语言中宏定义中#和##使用详解

    2024-01-19 23:34:02       35 阅读
  3. 高防服务器的优点有哪些?

    2024-01-19 23:34:02       37 阅读
  4. 计算机网络(第六版)复习提纲2

    2024-01-19 23:34:02       31 阅读
  5. Spring⾥⽤到的设计模式

    2024-01-19 23:34:02       28 阅读
  6. Redis的安装与配置

    2024-01-19 23:34:02       31 阅读
  7. Spring集成MyBatis与MyBatis-Plus添加分页插件

    2024-01-19 23:34:02       33 阅读
  8. Redis 配置

    2024-01-19 23:34:02       29 阅读
  9. 倒数87天

    2024-01-19 23:34:02       32 阅读