首页 > web前端 > js教程 > 正文

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

不言
发布: 2019-04-11 10:59:05
转载
2659 人浏览过

本篇文章给大家带来的内容是关于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.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!