溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript普通函數(shù)和箭頭函數(shù)有哪些區(qū)別

發(fā)布時(shí)間:2020-09-16 09:39:07 來(lái)源:億速云 閱讀:136 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要介紹JavaScript普通函數(shù)和箭頭函數(shù)有哪些區(qū)別,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

我常常的使用箭頭函數(shù),卻還沒(méi)有對(duì)箭頭函數(shù)有個(gè)深入的了解,現(xiàn)在找一下這2個(gè)函數(shù)的不同點(diǎn)

1. 箭頭函數(shù)本身沒(méi)有prototype(原型)

由于箭頭函數(shù)沒(méi)有原型,因此箭頭函數(shù)本身沒(méi)有this

let a = () => {}
console.log(a.prototype) // undefined
let b = function () {}
console.log(b.prototype) // Object
2. 箭頭函數(shù)的this指向在定義的時(shí)候繼承自外層第一個(gè)普通函數(shù)的this
let a;
let barObj = {
    msg: 'bar的this指向'
}
let fooObj = {
    msg: 'foo的this指向'
}
bar.call(barObj)
foo.call(fooObj) // { msg: 'bar的this指向'  }
bar.call(fooObj)
a() // { msg: 'foo的this指向' }

function foo() {
    a()
}
function bar () {
    a = () => {
        console.log(this)
    }
}

從上面例子中可以得出:

箭頭函數(shù)的this指向定義時(shí)所在的外層第一個(gè)普通函數(shù),跟使用位置沒(méi)有沒(méi)有關(guān)系

被繼承的普通函數(shù)的this指向改變,箭頭函數(shù)的this也會(huì)跟著改變。

不能直接修改箭頭函數(shù)的this

可以通過(guò)修改被繼承的普通函數(shù)的this指向,然后箭頭函數(shù)的this也會(huì)跟著改變

3. 箭頭函數(shù)使用arguments

let b = () => {
        console.log(arguments);
    }
    b(1,2,3,4) // arguments is not defined

    function bar () {
        console.log(arguments);  // 完成第二個(gè)普通函數(shù)
        bb('完成第一個(gè)普通函數(shù)')
        function bb() {
            console.log(arguments); // 完成第一個(gè)普通函數(shù)
            let a = () => {
                console.log(arguments); // 完成第一個(gè)普通函數(shù)
            }
            a('箭頭函數(shù)')
        }
    }
    bar('完成第二個(gè)普通函數(shù)')

從上面可以得出以下2點(diǎn)

  1. 箭頭函數(shù)指向window時(shí),arguments會(huì)報(bào)未定義的錯(cuò)誤
  2. 如果不是window,那么就是外層第一個(gè)普通函數(shù)的arguments

4. 箭頭函數(shù)不可以使用new

無(wú)論箭頭函數(shù)的this指向哪里,使用new調(diào)用箭頭函數(shù)都會(huì)報(bào)錯(cuò),箭頭函數(shù)沒(méi)有構(gòu)造函數(shù)

let a = () => {}
    let b = new a() // a is not a constructor

以上是JavaScript普通函數(shù)和箭頭函數(shù)有哪些區(qū)別的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI