2024年最全「2024」打算跳槽涨薪,必问面试题及答案 -- ECMAScript 篇(1),2024年最新字节跳动社招面试记录

最后

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

function isEqual( a, b ){

if( a-b < Number.EPSILON ){

return true

}else{

return false

}

}

console.log( isEqual( 0.1+0.2, 0.3 ) )

11、ECMAScript 6 怎么写 class ,为何会出现 class?


ES6 中新增 class ,它是为了补充 js 中缺少的一些面向对象语言的特性,本质上来说它只是一种语法糖,它的绝大多数功能 ES5 都可以实现,新的 class 写法让对象原型写法更清晰。添加 class 之后,有利于我们更好的组织代码,在 class 中添加方法,其实就是添加到类的原型上。

class 应用:

class Phone{

// 构造函数

constructor( brand, price ){

this.brand = brand;

this.price = price

},

call(){

console.log(“可以打电话”)

}

}

// 实例化对象

let hw = new Phone( ‘华为’, 999 )

12、setTimeout、Promise、Async/Await 的区别


setTimeout 是异步执行函数,js 主线程运行到此函数时,不会等待 setTimeout 中的回调函数,回调函数会被压进消息队列,然后直接向下执行,当执行完当前事件循环的时候,回调函数会在下次事件循环中被执行。

console.log(1)

setTimeout(()=>{

console.log(2)

},0)

console.log(3)

// 运行结果:1 3 2

Promise 本身是同步的立即执行函数,当在执行体中执行 resolve 或 reject 的时候,此时是异步操作,会先执行 then / catch 等,等主栈完成后,才会执行 resolve reject 中的方法。

console.log(1)

var p =new Promise(( resolve, reject )=>{

console.log(2)

resolve(3)

})

p.then((res)=>{

console.log(res)

})

console.log(4)

// 运行结果:1 2 4 3

Async/Await 函数返回的是一个 Promise 对象,当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,在执行函数体后面的语句。

await的含义为等待,也就是 async 函数需要等待await后的函数执行完成并且有了返回结果(Promise对象)之后,才能继续执行下面的代码。await通过返回一个Promise对象来实现同步的效果。

async function a1(){

console.log( 1 );

await a2();

console.log( 2 )

}

async function a2(){

console.log( 3 )

}

console.log( 4 );

a1();

console.log( 5 )

// 运行结果 4 1 3 5 2

13、forEach、for in、for of 三者区别


forEach 是数组的方法,进行遍历数组的。

for…in 不仅可以遍历数组,还可以对象。

for…of 进行遍历数组的。

for…in 与 for… of 遍历对象时,in 使用的是下标,而 of 使用的是 key。

14、说一下 es 6 的导入导出模块


export 命令用于规范模块的对外接口。

import 命令用于输入其他模块提供的功能。

export 对外暴露数据方式有三种:

方式1:分别暴露

export let person = “前端小姐姐”

export function showName(){

console.log( “倩倩” )

}

方式2:统一暴露

let person = “前端小姐姐”

function showName(){

console.log( “倩倩” )

}

export {

person,

showName

}

方式3:默认暴露

export default{

person = “前端小姐姐”,

showName: function(){

console.log( “倩倩” )

}

}

import 引入方式有三种:

方式1:通用的导入方式

import * as m from “./src/js/m.js”

console.log( “m”,m )

方式2:解构赋值

import { person, showName } from “./src/js/m.js”

// 重名时,可自定义名字

import { person as per, showName } from “./src/js/m.js”

// 针对默认暴露也可以这么写

import { default as m } from “./src/js/m.js”

方式3:简便形式,针对默认暴露

import m from “./src/js/m.js”

15、介绍下 Set、Map的区别 ?


应用场景 Set 用于数组重组,Map 用于数据储存。

对于Set:

  • 成员不能重复。

  • 只有键值没有键名,类似数组。

  • 可以使用 for…of 遍历

  • 方法有 size、add、delete、has、clear

对于Map:

  • 键值对的集合,类似集合。

  • 可以 for…of 遍历

  • 方法有 size、set、delete、has、clear


光说理论是不是都要困了,现在是时候大展拳脚了!看看你对 ES 知识掌握到底怎么样?


16、写出下面代码运行结果。


new Promise((resolve)=>{

console.log( 1 )

resolve()

}).then(()=>{

console.log( 2 )

new Promise(res=>{

res(1)

}).then(()=>{

console.log( 3 )

new Promise(res=>{

res(1)

}).then(()=>{

console.log( 4 )

})

}).then(()=>{

new Promise(res=>{

res(1)

}).then(()=>{

console.log( 5 )

})

})

}).then(()=>{

console.log( 6 )

})

答案: 1 2 3 6 4 5

17、箭头函数中的 this 。请写出下面代码运行结果。


name = “单身狗”

setTimeout(()=>{

console.log(this.name) //单身狗

},0)

function Job(){

this.name = “漂亮小姐姐”

setTimeout(()=>{

console.log(我是天天敲代码的 ${this.name} !) //漂亮小姐姐

},3000)

}

let j = new Job()

箭头函数没有自己的 this ,它的 this 是继承而来的,默认指向在定义它时所处的对象。

18、写出下面代码运行结果。


var name = ‘window name’

var p1 = {

name:‘p1 name’,

showName:function(){

console.info(this.name)

}

}

var fn = p1.showName

fn()

p1.showName()

var p2 = {

name:‘p2 name’,

showName:function(fun){

fun()

}

}

p2.showName(p1.showName)

p2.showName = p1.showName

p2.showName()

/*

运行结果:

window name

p1 name

window name

p2 name

*/

19、箭头函数可以用call或者apply改变this指向吗?


call 和 apply 都是用来改变 this 指向的,它们会立即执行。

ES6 箭头函数的主要特性:

  • 箭头函数没有自己的 this 对象,箭头函数内部的 this 是词法作用域,由上下文确定。this 在定义函数的时候已绑定,并非执行函数的时候。

  • 箭头函数的 this 永远指向其父级作用域。

  • 任何方法都改变不了 this ,包括 call、apply 和 bind。

试试下面这个练习,你就知道了。

const obj1 = {

name:‘张三’,

}

const obj2 = {

name:‘李四’,

fun2 : function(){ //修改成箭头函数再试试

console.log(this);

}

}

obj2.fun2();

obj2.fun2.call(obj1);

最后

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

箭头函数的 this 永远指向其父级作用域。

  • 任何方法都改变不了 this ,包括 call、apply 和 bind。

试试下面这个练习,你就知道了。

const obj1 = {

name:‘张三’,

}

const obj2 = {

name:‘李四’,

fun2 : function(){ //修改成箭头函数再试试

console.log(this);

}

}

obj2.fun2();

obj2.fun2.call(obj1);

最后

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值