前端 JavaScript 基础面试题, JavaScript 的 forEach 和 map 方法有什么区别?
前端 JavaScript 基础面试题, JavaScript 的 forEach 和 map 方法有什么区别?
QA
Step 1
Q:: JavaScript 的 forEach 和 map 方法有什么区别?
A:: forEach 和 map 都是 JavaScript 中用于遍历数组的方法,但它们有一些关键区别:1. 返回值:forEach 不返回任何值,只是执行回调函数,而 map 返回一个新的数组,新数组中的元素是原数组元素经过回调函数处理后的值。2. 可变性:forEach 通常用于不需要返回值的场景,如修改原数组元素或进行一些副作用操作;map 则用于将原数组转换成一个新的数组。3.
链式调用:由于 forEach 不返回值,因此不能进行链式调用,而 map 返回新数组,可以进行链式调用。
Step 2
Q:: 如何用 JavaScript 检测一个变量是数组?
A:: 可以使用 Array.isArray() 方法来检测一个变量是否为数组。例如:Array.isArray([1, 2, 3]) 返回 true,而 Array.isArray({a: 1})
返回 false。
Step 3
Q:: 什么是闭包(closure),它有什么用途?
A:: 闭包是指一个函数能够记住其定义时的词法环境,即使在函数执行环境之外调用,它仍能访问这些变量。闭包常用于创建私有变量和函数,避免全局作用域污染,同时实现数据的封装。
Step 4
Q:: 解释 JavaScript 中的原型链(prototype chain)
A:: 原型链是 JavaScript 实现继承的一种机制。每个对象都有一个原型对象,通过访问 proto 或 Object.getPrototypeOf()
可以获得原型。当访问一个对象的属性时,如果该属性不存在于对象本身,就会沿着原型链向上查找,直到找到属性或到达原型链的顶端(通常是 null)。
Step 5
Q:: 什么是事件委托,为什么要使用它?
A:: 事件委托是一种将事件监听器添加到父元素上,而不是每个子元素的技术。通过冒泡机制,当子元素触发事件时,事件会冒泡到父元素,由父元素的事件监听器处理。使用事件委托可以减少内存占用,提高性能,尤其是在处理大量动态添加或删除的元素时非常有用。