JavaScript普通函数和箭头函数有什么区别?
程序员文章站
2022-04-03 10:08:41
...
本篇文章给大家带来的内容是关于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点
- 箭头函数指向window时,arguments会报未定义的错误
- 如果不是window,那么就是外层第一个普通函数的arguments
4. 箭头函数不可以使用new
无论箭头函数的this指向哪里,使用new调用箭头函数都会报错,箭头函数没有构造函数
let a = () => {} let b = new a() // a is not a constructor
【相关推荐:JavaScript视频教程】
以上就是JavaScript普通函数和箭头函数有什么区别?的详细内容,更多请关注其它相关文章!
推荐阅读
-
PHP explode()函数的几个应用和implode()函数有什么区别
-
JavaScript基础之this和箭头函数详析
-
JavaScript中的普通函数和箭头函数的区别和用法详解
-
JavaScript普通函数中的this指向判断,箭头函数的this有什么不同?
-
JavaScript 中,定义函数时用 var foo = function () {} 和 function foo() 有什么区别?
-
区别ES3ES5和ES6this的指向问题。区分普通函数和箭头函数中this的指向问题
-
javascript条件式访问属性和箭头函数介绍
-
JavaScript 箭头函数的特点、与普通函数的区别
-
Javascript 普通函数和构造函数的区别
-
箭头函数和普通函数的区别2.0