前端面试题(四)

157 阅读1分钟

携程8问

  1. ⼿写两道算法题

  2. 对React看法,有没有遇到⼀些坑

React是一个强大的前端框架、React的JSX、React的组件化、React的自动渲染。

React的setState是异步的,标签的for要改成htmlFor, 路由默认是模糊匹配的,react的类组件,constructor中必须调用super都是React可能遇到的坑

  1. 对闭包的看法,为什么要⽤闭包

包含自由变量(未保留在特定对象中的变量)的环境,通常用包含一个使用自由变量的函数,防止自由变量被销毁。

为什么要使用闭包,主要是为了保留自由变量。自由变量相比与全局变量有什么好处呢,自由变量只存在在特定域(可能是一个函数内部,可能是块)内,所以不会影响其他域。

  1. ⼿写数组去重函数
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))
  1. ⼿写数组扁平化函数
Array.prototype.flatten = function () {
  return this.reduce(function (prev, cur, curIndex, arr) {
      return Array.isArray(cur) ? prev.concat(cur.flatten()) : prev.concat(cur); 
  }, []);
}
  1. 介绍下Promise的⽤途和性质

Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息。

  1. Promise和Callback有什么区别

Promise是异步的,Callback是同步的。

  1. React⽣命周期

组件加载,组件更新,组件卸载