前端面试笔试总结一

147 阅读2分钟

最近面试遇到的笔试题,话不多说,直接上题

1.promise相关

    function fn() {
        console.log(1);
        Promise.resolve().then(function() {
            console.log(2);
        })
    }
    console.log(3);
    fn()
    setTimeout(function() {
        console.log(4);
    }, 0)
    var p = new Promise(function(resolve, reject) {
        console.log(5);
        setTimeout(() => {
            console.log(6);
        }, 0);
        resolve()
        console.log(7);
    })
    p.then(function() {
        console.log(8);
    })
    console.log(9);

答案:3 1 5 7 9 2 8 4 6

思路:先执行同步代码,再执行异步代码,then是微任务,setTimeout是宏任务,先执行微任务,再执行宏任务

2.let相关

    var a = 10
    function fn() {
        console.log(a);
        let a = 20
    }
    fn()

答案:报错

思路:let声明的变量会存在暂时性死区

3.浮点数相关

 console.log(0.1 + 0.2 === 0.3);

答案:false

思路:js浮点数会有精度问题

4.运算符相关

    console.log(1 + "2" + "2");
    console.log(1 + +"2" + "2");
    console.log(1 + -"1" + "2");
    console.log(+"1" + "1" + "2");
    console.log("a" - "b" + "2");
    console.log("a" - "b" + 2);
    console.log("a" - "b");

答案:122 32 02 112 NaN2 NaN NaN

思路:字符串相加为相连,ps(这道题给我整懵了)

5.Array相关

    console.log(Array(2));
    console.log(Array(2, 3));

答案:返回长度为2的空数组 返回一个元素是2和3的数组

思路:Array函数可以创建一个数组,当输入一个参数且为数字的话,那么返回的就是这个参数长度的空数组,当如果是多个参数时,返回的就是相对应参数组成的数组

6.this相关

    function Fn() {
        this.name = '张三'
        var age = 18
        this.sayAge = function() {
            console.log('my age is' + this.age);
        }
        this.sayHi = function() {
            console.log('Hi' + name);
        }
    }
    var p = new Fn()
    console.log(p.name);
    console.log(p.age);
    p.sayAge();
    p.sayHi()

答案:张三 undefined my age isundefined Hi

思路:this指向了构造函数创建的实例对象

7.setTimeout相关

    function fn() {
        setTimeout(fn, 0)
    }

答案:无输出

8.for和foreach相关

    function fn() {
        for (var i = 0; i < 10; i++) {
            if (i === 3) {
                console.log(i);
                return
            }
            console.log(i);
        }
    }
    function fn() {
        [0, 1, 2, 3, 4, 5, 6].forEach(function(i) {
            if (i === 3) {
                return
            }
            console.log(i);
        })
    }
    fn()

答案:无输出 0 1 2 4 5 6

思路:函数不调用不执行 foreach遍历每一项,return后面的语句不执行,相当于终止函数

9.浅拷贝相关

    var objA = {
        a: 10,
        b: 20
    }
    var objB = objA
    console.log(objA.a);
    objB.a = 30
    console.log(objA.a);
    setTimeout(function() {
        objA.a = 10

    }, 0)
    console.log(objB.a);

答案:10 30 30

思路:对于引用类型,直接赋值认为是浅拷贝,setTimeout是任务队列中的宏任务,放在后面再执行

10.set相关

    var arr = new Set([0, 1, 2, 3, 3])
    console.log(arr);
    console.log(arr.length);

答案:set类 undefined

思路:set方法返回的是一个set类,并不是一个数组