其他分享
首页 > 其他分享> > 1.21面试题

1.21面试题

作者:互联网

  1. 什么是原型,什么是原型链
  1. 剔除数组首元素的方法有哪些
arr.slice(1,arr.length)
arr.splice(0,1)
newArr = arr.filter((val, index, arr) => {
    return index !== 0;
})
  1. promise的状态有哪些
  1. promise有什么特点
  1. 什么是回调地狱
    简单地说就是一个异步请求套着一个异步请求,一个异步请求依赖于另一个的执行结果,使用回调的方式相互嵌套
    到最后,缩略图成了 一个三角形 造成了可阅读性差,可阅读性差就代表代码的可维护性可迭代性差,最后还有一个就是可扩展性差
    也不符合设计模式的六大原则, 其中的单一职责原则, 和 开闭原则

  2. for in 遍历数组有哪些问题

  1. 观看示例,输出结果是什么,并阐明理由

例1

const promise = new Promise((resolve, reject) => {
    console.log(1)
    resolve()
    console.log(2)
})
promise.then(() => {
    console.log(3)
})
console.log(4)
// 1 2 4 3
// Promise的创建是一个同步过程,里面的同步代码会先执行
// 第一轮事件循环会先执行所有的同步任务
// promise在下一轮的事件循环中执行

例2

function fn(){
    for (let i = 0; i < 4; i++) {
        setTimeout(function(){
            console.log(i)
        },1000)
    }
}
fn()

// 0 1 2 3
// let有自己的作用域块 { 循环体 } 在每次执行循环体之前,JS 引擎会把 i 在循环体的上下文中重新声明及初始化一次
// 所以在for循环中的表达式中使用let它的每一个值都会单独存在一个独立的作用域中不会被覆盖掉
// 计时器可以在scope作用域链中找到let声明的作用域

例3

let a = 0
let b = async () => {
    a = a + await 10
    console.log('2', a)
}
b()
a++
console.log('1', a)

// 1 1 
// 2 10
// async表示函数体里有异步操作,await会把10包装成一个promise对象,会在下一轮的事件循环中开始,第二个a是10 是因为let不会进行变量提升

标签:面试题,console,log,arr,原型,let,promise,1.21
来源: https://www.cnblogs.com/dark-duck/p/14324933.html