面试时面试官想要听到什么答案 关于es6中let、const、promise、块级作用域的问题

前言

前面写了一篇关于vue方面问题的面试题(面试时面试官想要听到什么答案(关于一些vue的问题)),感谢大家的阅读和意见,今天整理了一下我面试时经常会问到的一些关于es的问题,写了这篇文章,感谢拨冗翻阅拙作,敬请斧正。
因为最近比较忙es6的问题就写了这些,写的比较水了,这些也是我比较常问的还有一些比较碎的内容面试问了但本文未体现只挑选了重点的,class和symbol也是两个重点,因为我了解不深所以就没有去问这两个 - -
下面进入正文,本文会列举一些平时面试时问到的问题和答案,并说明我在当时问到这个问题时所期望对方的回答:

es6有哪些属性

问题

常用的es6语法有哪些

问题描述

作为es6问题的开始的一个问题,想通过这个问题知道对方写代码时是否在用es6,是否知道自己用的是es6。但是大部分都说不上来几个(其实突然问我,我也不一定能说很多,当然面试多了之后就可以随口就来),所以我都怀疑这个问题有没有问的必要,对方这个问题其实回答的多少我后面还是该怎么问还是怎么问,也并不影响此次面试。

期望答案

let、const
解构赋值
模板字符串
箭头函数
函数默认值
promise
set、map结构
class类
symbol
Iterator 和 for…of 循环.
数值的扩展方法
数组的扩展方法
正则的扩展方法
对象的扩展方法
。。。。。。
以上为一些常用到的,还有一些不常用的就不一一列举了

var、let、const

问题

说下var、let、const的区别
问题描述
一个非常基础的问题,基本都是回答的差不多,不过有时候会说var和let的区别为一个没有作用域一个有作用域,显然这是一个误区。const是常量这个都知道,但是他可变的情况就很少有人清楚,阮一峰的《ECMAScript 6 入门》有详细的说明。

期望答案

let、const不存在变量提升,var存在变量提升
let、const不能重复声明,var可以重复声明
let、const有块级作用域,var没有块级作用域

补充:

块级作用域为 {} 只要被包裹在在{}中都是一个块级作用域,比如:if、for、function、或者是直接只写一个{}

const声明一个只读的常量。一旦声明,常量的值就不能改变。
本质:

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
所以const声明的对象、数组在对内部进行操作时是并不会报错的,即const声明的可变情况。

块级作用域和函数声明

问题

块级作用域对函数声明有什么影响或改变
问题描述
这个问题我并没有在面试中问过,因为这个问题其实很抽象而且很难去说明,而且这个环境问题就很难去模拟,下面是我在查阅了一些文档和书之后的一些理解,如果有问题,敬请斧正。
阮一峰的《ECMAScript 6 入门》中let、const中有一节是对这一块的描述。

期望答案

ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。但是,浏览器没有遵守这个规定,为了兼容以前的旧代码,还是支持在块级作用域之中声明函数,不会报错。
ES5环境下可以实现下面代码

demo()  // 打印 bbb
var flag = true
if (flag) {
    function demo() {
        console.log(‘aaa‘)
    }
} else {
    function demo() {
        console.log(‘bbb‘)
    }
}

执行此代码时,会先将函数声明提升到顶部而并不会根据判断在下面进行声明,打印bbb是因为第一个声明被第二个声明覆盖了(《你不知道的javaScript》第一部分第四章第三节),实际为下面代码:

function demo() {
    console.log(‘aaa‘)
}
function demo() {
    console.log(‘bbb‘)
}
var flag
demo()  // 打印 bbb
flag = true
if (flag) {
} else {
}

ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。ES6规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。
如果改变了块级作用域内声明的函数的处理规则,显然会对老代码产生很大影响。为了减轻因此产生的不兼容问题,ES6 在附录 B里面规定,浏览器的实现可以不遵守上面的规定,有自己的行为方式。

允许在块级作用域内声明函数。
函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
同时,函数声明还会提升到所在的块级作用域的头部。

注意,上面三条规则只对 ES6 的浏览器实现有效,其他环境的实现不用遵守,还是将块级作用域的函数声明当作let处理。
上面代码的执行顺序会变为

var flag
var demo
demo()  // demo is not a function
flag = true
if (flag) {
    function demo() {
        console.log(‘aaa‘)
    }
} else {
    function demo() {
        console.log(‘bbb‘)
    }
}

promise

问题

一般情况这个问题我会给面试者出一个代码题

console.log(1)
let promise = new Promise((resolve, reject) => {
    console.log(2)
    resolve()
    console.log(3)
})
setTimeout(() => {
    console.log(4)
}, 0);
console.log(5)
promise.then(() => {
    console.log(6)
})
console.log(7)

问题描述

正确执行顺序我会放在期望答案的最后,防止在看题时看到结果。
这个问题主要问的是两个关键点:1. promise在构造时内部就已经执行结束。2. promise.then和setTimeout的执行顺序

期望答案

关键点1:在Promise对象new的时候,Promise内部resolve前后就都执行了,resolve只与then有关(resolve调用时的参数为then的参数),并不会阻止后面代码的执行。
关键点2:promise.then的执行时间会早于setTimeout,promise和setTimeout都可以处理异步问题,promise为微任务setTimeout为宏任务,promise.then会在本次任务的最后的去调用,而setTimeout会开启一个新的任务去执行其内部的内容,即下一次任务的开始。所以6比4先打印。

问题执行结果:1 2 3 5 7 6 4

 

原文地址:https://www.cnblogs.com/a609251438/p/12178268.html

时间: 2024-08-03 00:26:25

面试时面试官想要听到什么答案 关于es6中let、const、promise、块级作用域的问题的相关文章

面试时面试官想要听到什么答案(关于一些vue的问题)

前言 自己也只是一个前端的小白,因为公司大佬都比较忙,面试这种事就落到了我这小白身上,第一次叫我去的时候我是百般拒绝的,因为自己还是有自知之明的,但是别人实在抽不开身,没办法只能去了,他们开玩笑说就按你这水平来就行了,啥时候你问不住了就让他来复试就行.前前后后也面了一些人,加上自己面试时候整理的一些问题,写了这篇文章,感谢拨冗翻阅拙作,敬请斧正. 下面进入正文,本文会列举一些平时面试时问到的问题和答案,并说明我在当时问到这个问题时所期望对方的回答: 问题 请说一下vue的生命周期函数(钩子函数)

大厂HR面试必备ES6中的深入浅出面试题知识点

ESMAScript6简介,ES6是JavaScript语言的下一代标准,目的是让JavaScript语言可以写复杂的大型应用程序,成为企业级语言.那么ECMAScript和JavaScript的关系到底是什么呢?两者有着什么样的联系? JavaScript的创造者Netscape公司,将JavaScript提交给国际标准化组织ECMA,希望这种语言可以成为国际标准,次年,ECMA决定了浏览器脚本语言的标准,并称为ECMAScript. 因某些原因,一是商标,二是这门语言制定者是ECMA,不是N

软件测试面试,面试官最想听到的回答是什么样的?

其实早就计划写一篇这样的文章,但是已经不求职很长一段时间了,怕我总结的内容会影响到大家,这两天正好面试了几个测试,再加上和朋友碰的时候总结了一点东西,想想还是写下来分享给大家吧,希望能对正在找工作的你有所帮助 先从两个方面说一下吧,一是普通的面试技巧方面,再从项目方面说明一下 个人介绍 当你面试测试时最重要的是,哪年毕业的,参加工作几年了,我是谁,我上家公司是谁,公司做的项目是什么,我负责哪个模块,写测试用例用的什么方法,在测试中,用到了哪些测试工具,我最擅长的是功能测试,性能测试,自动化测试,

在做技术面试官时,我是这样甄别大忽悠的——如果面试时你有这样的表现,估计悬

记得我刚做技术面试官的时候,还比较单纯,别人说什么就信什么.这本来也没多大的错,虽然有些候选人会夸张自己的技能,但毕竟大多数候选人都是比较诚实的,相信绝大多数的技术面试官也像我这样,会以君子之心度人的. 但我面试了一阵后,有项目经理向我反映,经我手面试通过的一些候选人有存在实际技能与简历上描述不符的情况,比如简历上写的是熟悉Linux操作,但实际也就会几个命令,又如简历上写的是熟悉Spring Cloud,也有实际项目经验,但后来发现他其实没做过Spring Cloud的实际项目,简历上的项目是

Java程序员如何在面试时短时间内让面试官刮目相看?

前言 技术面试是每一位程序员都会经历的一件事情,技术面试官会通过自己的方式去考察程序员的技术功底与基础理论知识,这个过程被有的程序员成为"造火箭式的技术轰炸",不同程序员的面试经历与体验也是千差万别,各种奇怪,奇葩的情况也是层出不穷. 而很多Java程序员在面试时都有这样的苦衷: 我掌握了很多Java开发技巧,每次到笔试环节,死活就是答不上: 明明是一个职场老手,和面试官聊天,简单的技术问题都吞吞吐吐: Java程序员如何在面试时短时间内爆出核心技术?让对面的"不速之客&qu

面试时,当你有权提问时,别客气,这是个逆转的好机会(内容摘自Java Web轻量级开发面试教程)

前些天,我在博客园里写了篇文章,如何在面试中介绍自己的项目经验,收获了2千多个点击,这无疑鼓舞了我继续分享的热情,今天我来分享另外一个面试中的甚至可以帮助大家逆转的技巧,本文来是从 java web轻量级开发面试教程从摘录的. -------------------------------------------------------------------------------------------------------------------------------- 1 问题的背景

面试时经常会被问到的 3 个问题

前几天,我在<简历中打动人的 3 个关键点>和<简历中千万不要出现的 3 个问题>中讲了一些写简历的注意事项,今天想聊聊在面试过程中,如何更好的体现出自己的真实实力. 面试时,我经常会拿下面 3 个问题开场: 1.请做个简短的自我介绍:2.简单介绍一个自己参与度比较高的项目,以及自己在项目中的职责:3.简单描述下你在项目中发现的最有成就感的 Bug: 下面我分别针对这 3 个问题逐一做下说明. 1.请做个简短的自我介绍: 大部分的鸡汤文或者面经给出的建议可能是这样: 面试官你好,我

程序员在面试时更好的介绍项目经历

在面试时,经过寒暄后,一般面试官会让你介绍项目经验.常见的问法是:“说下你最近的(或最拿得出手的)一个项目”. 根据我的面试经验,发现有不少程序员对此没准备,说起来磕磕巴巴,甚至有人说出项目经验从时间段或技术等方面和简历上的不匹配,这样就会造成如下的后果. 第一印象就不好了,至少会感觉该候选人表述能力不强. 一般来说,面试官会根据程序员介绍的项目背景来提问题.假设面试时会问10个问题,那么至少有5个问题会根据程序员所介绍的项目背景来问,程序员如果没说好,那么就没法很好地引导后继问题了,就相当于把

[算法]面试时的Java数据结构与算法

查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码.对这两种排序的代码一定要信手拈来才行.还有插入排序.冒泡排序.堆排序.基数排序.桶排序等. 面试官对于这些排序可能会要求比较各自的优劣.各种算法的思想及其使用场景.还有要会分析算法的时间和空间复杂度.通常查找和排序算法