• 技术文章 >web前端 >js教程

    JavaScript普通函数和箭头函数有什么区别?

    不言不言2019-04-11 10:59:05转载873
    本篇文章给大家带来的内容是关于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视频教程

    以上就是JavaScript普通函数和箭头函数有什么区别?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:es6 javascript
    上一篇:angular2 NgModel模块的详细介绍 下一篇:Cookie和Session的区别总结
    大前端线上培训班

    相关文章推荐

    • JavaScript事件捕获与事件冒泡• 何时在JavaScript中使用const关键字?• JavaScript中setTimeout()和setInterval()两个定时器的区别• JavaScript:世界上最被误解的语言

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网