記一次百度的二面的面試題

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 100html

函數聲明瞭兩次,有一次覆蓋,最後的覆蓋了前面的,要是隻聲明一遍,那麼a1()打印的就是100node

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 1git

反直覺自帶坑的題github

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好在哪裏???

看會了,不必定真的會寫,你會寫了,可是和麪試官問的題會有些區別?面試

自行拿捏json

一場面試說明不了你的能力,也影響不了我想作的事,我依然熱愛,依然喜歡研究和學習,依然會繼續個人源碼架構方向,我不喜歡那種繞來繞去爲了應付面試而學的基礎,我不會由於面什麼而看什麼,我只想研究我想學的,把學到的分享給社區,我就很開心了,若是可以作開源,我會更開心的bash

附上最新寫的koa源碼解讀閉包

相關文章
相關標籤/搜索