常見前端面試題

箭頭函數(shù)與普通函數(shù)的區(qū)別

  • 箭頭函數(shù)語法比普通函數(shù)更加簡潔,但箭頭函數(shù)中沒有arguments,所以形參可以使用展開運(yùn)算符 (...args) => {console.log(args)}獲取
  • 箭頭函數(shù)沒有自己的this,他的this事繼承函數(shù)所處上下文中的this,使用call,apply等任何方式都無法改變this的指向
  • 箭頭函數(shù)不能被new執(zhí)行,因?yàn)榧^函數(shù)沒有prototype

如何把一個(gè)字符串的大小寫取反

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

數(shù)組扁平化

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

手寫一個(gè)new

function _new(Fn,...args){
    // 創(chuàng)建一個(gè)空對象,讓他的原型鏈指向Fn.prototype
    let obj = {}
    obj.__proto__ = Fn.prototype
    // 也可以使用下面這一行代碼完成上面的兩步操作
    let obj = Object.create(Fn.prototype)
    Fn.call(obj,...args)
    return obj
}

對象調(diào)用push

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

旋轉(zhuǎn)數(shù)組

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)

手寫一個(gè)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)

函數(shù)柯理化,請實(shí)現(xiàn)一個(gè)add函數(shù),滿足以下功能
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)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 所有題目答案整理自網(wǎng)絡(luò),如有錯(cuò)誤,接受指正,拒絕批評! js常見的數(shù)據(jù)類型,判斷方法 數(shù)據(jù)類型:基本數(shù)據(jù)類型: n...
    黃金原野閱讀 505評論 0 0
  • 阿里一面: web語義化 meta標(biāo)簽作用(頁面信息、搜索引擎、不同設(shè)備)認(rèn)識這篇文章講得很全面。 行內(nèi)元素、塊元...
    崽崽不哭閱讀 463評論 0 1
  • 深拷貝,淺拷貝 深拷貝是開辟一塊新的內(nèi)存地址,將源對象的各個(gè)屬性逐個(gè)復(fù)制過去,對拷貝對象和源對象各自的操作互不影響...
    zlf_j閱讀 317評論 0 1
  • 一、CSS問題 1.flex布局 display:flex; 在父元素設(shè)置,子元素受彈性盒影響,默認(rèn)排成一行,如果...
    陳二狗想吃肉閱讀 807評論 0 9
  • 常見前端面試題 第一天 ? 1. HTML5有哪些新特性?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)分HTM...
    小曼很nice閱讀 1,208評論 2 12

友情鏈接更多精彩內(nèi)容