JavaScript面试准备

ES6高频面试题目整理

【1】《JavaScript高级程序设计》第二版中写到:“超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined”。
But,在严格模式下,setTimeout( )的回调函数里面的this仍然默认指向window对象, 并不是undefined。

【2】形如for(let x…)的循环是每次迭代都为x创建新的绑定,ES5中采用闭包立即函数两种方法,加上let命令共三种哦!

for循环问题

var a =[];
for(var i=0;i<5;i++){
    a[i] = function () {
        return i;
    }
}
console.log(a[0]());

解法一:let命令

var a =[];
for(let i=0;i<5;i++){
    a[i] = function () {
        return i;
    }
}
console.log(a[0]());

解法二:闭包

var a = [];
for(var i=0;i<5;i++){
    a[i] = function (num) {
        return function () {
            console.log(num);
        }
    }(i);
}
a[1]();

解法三:即时函数


var a = []
for (var i = 0; i < 5; i++) {
    a[i] = (function (i) {
        return function () {
            console.log(i)
        }
    })(i)
}
a[2](); //2

练习:把以下代码使用两种方法,依次输出0-9

【3】Promise异步编程

  • 手写一个promise
  • 怎么解决回调函数里面回调另一个函数
  • 剖析代码依次输出的结果
  • jQuery的ajax返回的是promise对象吗?
  • promise只有2个状态,成功和失败,怎么让一个函数无论成功还是失败都能被调用?
  • Promise.all() 作用?当数组中所有Promise实例执行完成(resolve),Promise.all()返回resolve();当有一个失败(reject),Promise.all()立即返回reject(),并将rejected的实例返回值传递给Promise.all()的回调函数reject();
  • Promise 构造函数是同步执行的,promise.then 中的函数是异步执行的
  • Promise构造函数中的 resolve 或 reject 只有第一次执行有效,且promise 状态一旦改变则不能再变;
  • promise 的 .then 或者 .catch 可以被调用多次,但这里 Promise 构造函数只执行一次。或者说 promise 内部状态一经改变,并且有了一个值,那么后续每次调用 .then 或者 .catch 都会直接拿到该值。
  • then 或者 .catch 中 return 一个 error 对象并不会抛出错误,所以不会被后续的 .catch 捕获,除非是抛出一个错误throw,或者是返回一个Promise.reject()回调函数;
  • .then 或 .catch 返回的值不能是 promise 本身,否则会造成死循环;
  • .then 或者 .catch 的参数期望是函数,传入非函数则会发生值穿透;
  • .then 的第二个处理错误的函数捕获不了第一个处理成功的函数抛出的错误,而后续的 .catch 可以捕获之前的错误;
  • setTimeout和Promise.then()都属于上述异步任务的一种,为什么setTimeout和Promise.then()会有顺序之分?
  • Microtask && Macrotask ? 主线程中任务结束后调用 microtask 中的所有任务,然后调用一个macrotask 任务,主线程执行完该任务后又会先检查 microtasks 队列并完成里面的所有任务后再执行 macrotask,如此反复。

【4】macrotasks:

  • setTimeout
  • setInterval
  • setImmediate
  • requestAnimationFrame
  • I/O
  • UI rendering

microtasks:

  • process.nextTick
  • Promises
  • Object.observe
  • MutationObserver

前端面试之ES6篇(高产似母猪)

【1】es6出现了哪些新的特性
【2】箭头函数需要注意的地方
【3】ES6 let、const
【4】set数据结构
【5】promise对象的用法,手写一个promise
【6】class的理解
【7】模版语法的理解
【8】rest参数
【9】module体系

ES6面试题总结(2018-06-22)

【1】说出至少5个ES6的新特性,并简述它们的作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值