携程8问
-
⼿写两道算法题
-
对React看法,有没有遇到⼀些坑
React是一个强大的前端框架、React的JSX、React的组件化、React的自动渲染。
React的setState是异步的,标签的for要改成htmlFor, 路由默认是模糊匹配的,react的类组件,constructor中必须调用super都是React可能遇到的坑
- 对闭包的看法,为什么要⽤闭包
包含自由变量(未保留在特定对象中的变量)的环境,通常用包含一个使用自由变量的函数,防止自由变量被销毁。
为什么要使用闭包,主要是为了保留自由变量。自由变量相比与全局变量有什么好处呢,自由变量只存在在特定域(可能是一个函数内部,可能是块)内,所以不会影响其他域。
- ⼿写数组去重函数
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
var array = [];
for (var i = 0; i < arr.length; i++) {
if (array .indexOf(arr[i]) === -1) {
array .push(arr[i])
}
}
return array;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
- ⼿写数组扁平化函数
Array.prototype.flatten = function () {
return this.reduce(function (prev, cur, curIndex, arr) {
return Array.isArray(cur) ? prev.concat(cur.flatten()) : prev.concat(cur);
}, []);
}
- 介绍下Promise的⽤途和性质
Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息。
- Promise和Callback有什么区别
Promise是异步的,Callback是同步的。
- React⽣命周期
组件加载,组件更新,组件卸载