亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript普通函數和箭頭函數有哪些區別

發布時間:2020-09-16 09:39:07 來源:億速云 閱讀:137 作者:小新 欄目:web開發

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

我常常的使用箭頭函數,卻還沒有對箭頭函數有個深入的了解,現在找一下這2個函數的不同點

1. 箭頭函數本身沒有prototype(原型)

由于箭頭函數沒有原型,因此箭頭函數本身沒有this

let a = () => {}
console.log(a.prototype) // undefined
let b = function () {}
console.log(b.prototype) // Object
2. 箭頭函數的this指向在定義的時候繼承自外層第一個普通函數的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)
    }
}

從上面例子中可以得出:

箭頭函數的this指向定義時所在的外層第一個普通函數,跟使用位置沒有沒有關系

被繼承的普通函數的this指向改變,箭頭函數的this也會跟著改變。

不能直接修改箭頭函數的this

可以通過修改被繼承的普通函數的this指向,然后箭頭函數的this也會跟著改變

3. 箭頭函數使用arguments

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

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

從上面可以得出以下2點

  1. 箭頭函數指向window時,arguments會報未定義的錯誤
  2. 如果不是window,那么就是外層第一個普通函數的arguments

4. 箭頭函數不可以使用new

無論箭頭函數的this指向哪里,使用new調用箭頭函數都會報錯,箭頭函數沒有構造函數

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

以上是JavaScript普通函數和箭頭函數有哪些區別的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

讷河市| 汤阴县| 五指山市| 抚顺市| 达孜县| 镇宁| 左云县| 五常市| 广德县| 石台县| 怀来县| 花莲县| 定日县| 湘潭县| 昌黎县| 靖边县| 遂平县| 石家庄市| 西充县| 隆林| 东乌珠穆沁旗| 连山| 乌鲁木齐县| 陈巴尔虎旗| 缙云县| 宜丰县| 星子县| 南江县| 彭州市| 甘洛县| 新丰县| 竹溪县| 营口市| 循化| 甘孜| 布拖县| 吉安县| 大连市| 铜梁县| 商都县| 宜章县|