高级前端面试题(来自一位朋友的投稿哟)

第一题题目:

<script>
let a = new Date() === new Date() 	
let b = new Date("2020-08-25") == new Date("2020-08-25")
let c = new Date("2020-08-25").toString() == new Date("2020-08-25")
let d = new Date() === new Date().toString()
let e = 0.1 + 0.2 === 0.3
let f = 0.1 +0.2 == 0.3
console.log(a,b,c,d,e,f)
</script>

各位老哥思考十秒快速给出答案哦

答案:false false true false false false

第二题题目:

请构造一个obj 使得以下代码打印值为true

let obj = …
let bool = obj.val === 1 && obj.val === 2 &&obj.val === 3
console.log(bool)

分析:在进行判断时会获取val值,但是此时obj内部并没有一个val值。所以我们在obj内部用get方法返回一个参数,每次返回加一,就可以满足判断条件

即obj应该构造成这样
let obj = {
	_val:1,
	get val(){ //重点
		return this._val ++
	}
}

let bool = obj.val === 1 && obj.val === 2 &&obj.val === 3
console.log(bool) //结果打印true

第三题题目:

<script>
async function async1(){
	console.log('1')
	await async2()
	console.log('2')
}

async function async2(){
	await new Promise((resolve)=>{
		console.log('3')
		setTimeout(()=>{
			console.log('4')
			resolve()
		})
	})
	console.log('5')
}
console.log('6')
setTimeout(() => {
	console.log('7')
})
async1()

new Promise((resolve) => {
	console.log('8')
	resolve()
}).then(() =>{
	console.log('9')
})
console.log('10')
</script>

答案: 6 1 3 8 10 9 7 4 5 2 (有没有答对呀)
以下是小弟的分析
1.首先打印 6 这是毋庸置疑的 然后遇到定时器7 先把它加入宏任务队列中
2. 执行async1函数,则执行打印 1 接下来进入async2函数
3.执行promise函数 打印3 遇到定时器4 加入宏任务队列 由于async2阻塞了后面代码的执行
4.则执行 new Promise函数 打印了8 resolve()一个状态
5.继续执行同步函数console.log(‘10’),打印了10
6.我们先了解一下
微任务包括:promise.then(注意是promise.then) , process.nextTick等
宏任务包括: script(读取 执行script代码也算一种任务) setTimeout setInterval等
我们微任务宏任务同时存在时是先执行完所有的微任务再执行第一个宏任务 所以先执行微任务promise.then 打印 9
7.接下来执行第一个宏任务 打印7
8.然后执行第二个宏任务 打印4
9.promise函数执行完就往下走 所以接下来打印 5
10.最后打印2哟

补个小知识点:手写一个promise

<script>
function MyPromise(fn){
	let self = this
	let status = 'pending'
	let value = undefined
	let reason = undefined
	
	//成功执行的函数
	function resolve(value){
		if(status == 'pending'){
			self.status = 'resolve'
			self.value = value
		}
	}
	//失败执行的函数
	function reject(reason){
		if(status == 'pending'){
			self.status = 'reject'
			self.reason = reason
		}
	}
	
	try{
		fn(resolve,reject)
	}catch(e){
		reject(e)
	}
	//添加then方法
	MyPromise.prototype.then = (resolve,reject) => {
		if(this.status == 'resolve'){
			resolve(this.value) //成功状态下
		}
		if(this.status == 'reject'){
			reject(this.reason)  //失败状态下
		}
	}
	
}
//测试自己所写的promise
let promise2 = new MyPromise((resolve,rejeect)=>{
	resolve(520)
})
promise2.then(res=>{
	console.log(res) //打印520
})
</script>

第四题题目:什么是节流/防抖,请实现节流防抖函数

节流:是指在一个规定的单位时间内,只能有一次触发事件的监听回调,如果在一个单位时间内某事件被多次触发,只能有一次生效
防抖:是指事件被触发n秒后执行的回调,如果在这n秒内再次被触发,则重新计时(用在点击事件上)

防抖代码:

<script>
//防抖
function debounce(fn,delay){
	var timer = null
	return function(){
		var args = arguments
		//如果存在定时器
		if(timer){
			clearTime(timer)//清除定时器
			timer = null
		}
		timer = setTimeout(()=>{
			fn.apply(this,args)
		},delay)
	}
}
</script>

节流代码:

<script>
//节流
function throttle(fn,delay){
	var parTime = Date.now()
	return function(){
		vat _this = this
		var args = arguments
		var nowTime = Date.now()
		
		if(nowTime - parTime >= delay){
			parTime = Date.now()
			return fn.apply(_this,args)
		}
	}
}
</script>

第五题题目:请谈谈你对node.js的理解

1.运行原理
2.优缺点
3.应用场景
4.对前端工程师的意义
5.你用node.js做过什么,未来想用node.js做什么
(这个我也不会呀)

以上就是面试的五道题

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
高级前端面试题通常涵盖了广泛的主题,包括HTML、CSS、JavaScript、前端框架、性能优化、网络请求等。以下是一些常见的高级前端面试题及其答案: 1. 请解释一下什么是事件委托(Event Delegation)? 事件委托是一种利用事件冒泡的机制,将事件处理程序绑定到父元素上,通过判断事件源来执行相应的操作。这样可以减少事件处理程序的数量,提高性能和代码的可维护性。 2. 请解释一下什么是闭包(Closure)? 闭包是指函数可以访问并操作其外部函数作用域中的变量,即使外部函数已经执行完毕。闭包可以用来创建私有变量和实现模块化等功能。 3. 请解释一下什么是跨域(Cross-Origin)请求? 跨域请求是指在浏览器中,当前网页的域名、协议或端口与请求资源的域名、协议或端口不一致时,浏览器会阻止该请求。为了解决跨域问题,可以使用JSONP、CORS、代理服务器等方法。 4. 请解释一下什么是虚拟DOM(Virtual DOM)? 虚拟DOM是指通过JavaScript对象来描述真实DOM结构的一种技术。通过比较虚拟DOM和真实DOM的差异,可以最小化DOM操作,提高性能。 5. 请解释一下什么是防抖(Debounce)和节流(Throttle)? 防抖和节流都是用来控制函数执行频率的方法。防抖是指在事件触发后等待一段时间,如果在这段时间内再次触发事件,则重新计时。节流是指在一定时间间隔内只执行一次函数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值