美文网首页
常见前端面试题

常见前端面试题

作者: 无穷369 | 来源:发表于2021-03-15 20:41 被阅读0次

    箭头函数与普通函数的区别

    • 箭头函数语法比普通函数更加简洁,但箭头函数中没有arguments,所以形参可以使用展开运算符 (...args) => {console.log(args)}获取
    • 箭头函数没有自己的this,他的this事继承函数所处上下文中的this,使用call,apply等任何方式都无法改变this的指向
    • 箭头函数不能被new执行,因为箭头函数没有prototype

    如何把一个字符串的大小写取反

    小转大 toUpperCase()
    大转小 toLowerCase()
    let str = 'AbC'
    str = str.replace(/[a-zA-Z]/g,content => {
        return content.toUpperCase() === content ? content.toLowerCase() : content.toUpperCase()
    })
    

    数组扁平化

    let arr = [1,[2,[3,5]],4]
    arr.flat(Infinity)
    // [1,2,3,5,4]
    

    手写一个new

    function _new(Fn,...args){
        // 创建一个空对象,让他的原型链指向Fn.prototype
        let obj = {}
        obj.__proto__ = Fn.prototype
        // 也可以使用下面这一行代码完成上面的两步操作
        let obj = Object.create(Fn.prototype)
        Fn.call(obj,...args)
        return obj
    }
    

    对象调用push

    let obj = {
        2: 3,
        3: 4,
        length: 2,
        push: Array.prototype.push
    }
    obj.push(1)
    obj.push(2)
    console.log(obj)
    

    旋转数组

    function rotate(k){
        if (k < 0 || k === 0 || k === this.length) return this
        if (k > this.length) k = k % this.length
        return this.slice(-k).concat(this.slice(0,this.length-k))
    }
    Array.prototype.rotate = rotate
    let arr = [1,2,3,4,5,6,7]
    arr.rotate(3)
    

    手写一个bind

    ~function(){
        function myBind(context = window,...outerArg){
            let that = this
            return function(...innerArg){
                that.call(context,...outerArg.concat(innerArg))
            }
        }
        Function.prototype.myBind = myBind
    }()
    function fn(...args){
      console.log(this,args)
    }
    document.body.onclick = fn.myBind(obj,100,200)
    

    函数柯理化,请实现一个add函数,满足以下功能
    add(1) // 1
    add(1)(2) // 3
    add(1)(2)(3) // 6
    add().....()
    add(1)(2,3) // 6
    add(1,2)(3) // 6
    add(1,2,3)

    function currying(fn,length){
        length = length || fn.length
        return function(...args){
            if(args.length >= length){
                return fn(...args)
            }
            return currying(fn.bind(null,...args),length - args.length)
        }
    }
    function add(n1,n2,n3){
        return n1 + n2 + n3
    }
    add = currying(add,3)
    

    相关文章

      网友评论

          本文标题:常见前端面试题

          本文链接:https://www.haomeiwen.com/subject/jkabqltx.html