面试题-读代码(总结)

351 阅读2分钟

["1","2","3"].map(parseInt)

parseInt:解析一个字符串,并返回十进制整数,第一个参数str,即要解析的字符串,第二个参数radix,基数(进制),范围 2-36;

代码解析:

const nums = ["1","2","3"];

nums.map((item,index)=>{
    return parseInt(item,index);
    //parseInt("1",0); //0 表示没有传递第二个参数,按照10进制处理,返回 1;
     //parseInt("2",1); // 没有1进制,返回 NaN;
     //parseInt("3",2); // 2进制没有3,返回 NaN;
})

数组转树;

const arr=[
    { id: 1 , name: '部门A', parentId:0},
    { id: 2 , name: '部门B', parentId:1},
    { id: 3 , name: '部门C', parentId:1},
    { id: 4 , name: '部门D', parentId:2},
    { id: 5 , name: '部门E', parentId:2},
    { id: 6 , name: '部门F', parentId:3},
]

function convert (arr){
    let idToTreeNode=new Map();

    let root = null;

    arr.forEach(item=>{
        const {id,name,parentId} = item;

        //定义 treeNode 并加到map
        const treeNode = {id,name};
        idToTreeNode.set(id,treeNode);

        //找到父节点,并加到父节点的children中
        const parentNode=idToTreeNode.get(parentId);
        if(parentNode){
            if(parentNode.children==null) parentNode.children=[];
            parentNode.children.push(treeNode);
        }

        //找到根节点
        if(parentNode===0) root=treeNode;
    })
}

树转数组;

function convert1 (root) {
    const  nodeToParent = new Map();
    const arr = [];
    const queue =[];
    queue.unShift(root);//根节点入队

    while(queue.length>0){
        const curNode = queue.pop();//出队
        if(curNode==null) = break;

        const {id, name,children=[]} = curNode;

        //创建数组item 并push
        const parentNode = nodeToParent.get(curNode);
        const parentId = parentNode?.id||0;
        const item = {id, name,parentId};
        arr.push(item);

        //子节点入队
        children.forEach(child=>{
            //映射
            nodeToParent.set(child,curNode);
            //入队
            quene.unShift(child)
        })
    }
}

当多个 promise 链式调用时,.then会交替执行,then 中返回 promise 实例,会"慢两拍"

React 的 setState

默认情况:默认异步更新,默认合并后更新;

不在 React 上下文触发,会同步更新:setTimeout,setInterval,promise.then;自定义 DOM 事件,Ajax 回调;(React18 之前:18 需要将 ReactDOM.rander 更改为 ReactDOM.createRoot 才会异步更新);

setState 传入函数不合并更新

react 的 setState 是宏任务还是微任务;

setState 是同步,只不过让 React 做成了异步的样子;以为要考虑性能,多次修改 state,只进行一次渲染;

对象和属性的连续赋值;

值类型存储在栈中;

引用类型:会在栈中建一个变量,指向堆中存储的数据;

连续赋值,倒序执行;

变量声明高于赋值的优先级;

  • 读代码的面试题,要按照引擎执行代码去阅读.要分析本质去理解代码;