记一次百度的二面的面试题

443 阅读2分钟

1.闭包加作用域问题

let test 
let a = ()=>{
	let n=99
	test = ()=>{
		n++;
	}
	let a1 = ()=>{
		console.log(n)
	}
	return a1
}
let a1 = a()
let a2 = a()

test()
a1()
a2()

打印结果是99 100

函数声明了两次,有一次覆盖,最后的覆盖了前面的,要是只声明一遍,那么a1()打印的就是100

2.作用域问题

let a = 1
function add(a){
 return a = a + 1
}
console.log(a)
add(a)
console.log(a)
function add(a){
 return a = a + 4
}
add(a)
console.log(a)

打印 1 1 1

反直觉自带坑的题

3.找鼠标最近的a标签

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id='wrap'>
		<a href="">链接1</a>
		<br>
		最美的不是下雨天是你
		<a href="">链接2</a>
		<br>
		最美的不是
		<a href="">链接3</a>
		<br>
		最美的不是下雨
		<a href="">链接4</a>
		最美的不是下雨天
		<a href="">链接5</a>
		<br>
		最美的不是下雨天是你
		<a href="">链接6</a>
	</div>
	<script>
		window.onload=function(){ 
		  let oa = document.getElementsByTagName("a"); 
		  let arr = []
		  oa = Array.from(oa)
		  oa.forEach(function(element, index) {
		  	arr.push([element.offsetLeft,element.offsetTop])
		  });
		  window.addEventListener('mousemove',(e)=>{
			let LEN =[]
			arr.forEach( function(element, index) {
				let len = Math.pow(Math.pow(Math.abs(e.clientX-element[0]),2)+Math.pow(Math.abs(e.clientY-element[1]),2),0.5).toFixed(3)
				LEN.push(len)
			});
			let c = Math.min(...LEN)
			let key = LEN.indexOf(c.toString())
			for(let i=0;i<oa.length;i++){
				oa[i].style.color = "#999"
			}
			if(oa[key]){
				oa[key].style.color = "red"
			}
		  })
		} 
		// 最后来个防抖节流完美
	</script>
</body>
</html>

4.写vDom

  1. 用对象表示dom结构
  2. 根据json生成dom
  3. dom变化记录变化
  4. 在真实dom更新变化

vdom好在哪里???

看会了,不一定真的会写,你会写了,但是和面试官问的题会有些区别?

自行拿捏

一场面试说明不了你的能力,也影响不了我想做的事,我依然热爱,依然喜欢研究和学习,依然会继续我的源码架构方向,我不喜欢那种绕来绕去为了应付面试而学的基础,我不会因为面什么而看什么,我只想研究我想学的,把学到的分享给社区,我就很开心了,如果能够做开源,我会更开心的

附上最新写的koa源码解读