1

前端面试题

一、笔试题

1、元素垂直居中的几种常用方法(越多越好)?

2、左右固定,中间自适应布局?

3、截取字符串abcdefg中的def?

let str = 'abcdefg';

if(str.indexOf('def')!=-1){

console.log(str.substr(str.indexOf('def'),3));

}

4、请将数组按小到大排序并没有重复?

let arry = [1, 16, 22, 5, 2, 7, 1, 3, 9, 16, 3, 7, 10, 22]

5、请写出下面一段代码的输出

for (var i = 1; i <= 5; i++) {

setTimeout(function () {

console.log(i)

}, i*1000 )

}

答:每隔1s输出一个6,一共输出5次6(i被封闭在一个共享的全局作用域中,所有函数共享一个i的引用)

问:如何能间隔1s顺序输出1,2,3,4,5

(答出把var改成let,还有别的其他方法没?)

6、把对象{a: 1, b: 2, c: 3}转换成[1, 2, 3]

function change (_jsonData_) {

let Arr = []

for (let i in _jsonData_) {

Arr.push(_jsonData_[i])

}

return Arr

}

change({a: 1, b:2, c:3})

7、写出下面一段代码的输出,并写出原因?

var a = 2;

let b = 3;

(function () {

console.log(b)

if (typeof a === 'undefined') {

var a = 8

console.log(a)

} else {

console.log(a)

}

})()

if (a) {

console.log(a)

let a = 9

console.log(a)

}

8、写出下面一段代码的输出?

async function one () {

console.log('1')

await two()

console.log('1 end')

}

async function two () {

console.log('2')

await three()

console.log('2 end')

}

async function three () {

console.log('3')

}

console.log('script start')

setTimeout(function () {

console.log('setTimeout')

}, 0)

one()

three()

console.log('script end')

one()

three()

console.log('script end')

9、在js里call()与apply()有什么相同和不同?

共同点都可以继承熟悉和方法,不同点是call第二个参数是个形参,而apply第二个参数是数组

10、深拷贝和浅拷贝的区别是什么?实现一个深拷贝

https://juejin.im/post/5d124a12f265da1b9163a28d

二、问答题

1、移动端怎么自适应?

2、vue父子组件如何通信?

3、Vue中如何监听某个属性值的变化?

4、你常用哪些异步编程? (Callback,事件监听,发布订阅,Promise,async/await    只答ajax就追问还有吗? 连Generators都答了就追问是用来写什么需求吗?)

5、如何进行状态管理?

6、如何进行项目重构?

7、你见过最糟糕的代码是怎样的,如何优化它们?(考察经验)

8、开发中遇到比较难的问题是?如何解决的?

9、做过的有成就感的项目/功能?具体聊某一个项目中运用的技术.


码码码农
11 声望0 粉丝

一枚努力向上的前端开发者