JavaScript普通函数与箭头函数有怎样的区别?
硅谷探秘者
1年前发表
前端,javascript
0
0
1739
比较点 |
普通函数 |
箭头函数 |
简写 |
|
箭头函数如果没有参数,同时函数体的返回值只有一句,则{}和return都可以省略。 |
this指向 |
this总是指向调用它的对象,如果作为构造函数,它指向创建的对象实例 |
箭头函数的this指向的是父级作用域的this,是通过查找作用域链来确定 this 的值,也就是说看的是上下文的this,指向的是定义它的对象,而不是使用时所在的对象。 |
this改变 |
call()、apply()、bind()等方法能改函数中this的指向 |
call()、apply()、bind()等方法不能改变箭头函数中this的指向 |
构造函数 |
可以作为构造函数,用来创建对象实例 |
箭头函数不能作为构造函数使用 |
arguments对象 |
每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。 |
箭头函数没有自己的arguments,取而代之用rest(剩余)参数…arg来解决 |
prototype原型 |
具有prototype |
没有prototype原型 |
重要特性
1、箭头函数没有 arguments
// 1、普通函数中的arguments正确使用:
function foo(n) {
// 隐式绑定 foo函数的参数 与 arguments对象.
// arguments[0] 表示传给foo函数的第一个参数,也就是n
var f = () => arguments[0] + n;
return f();
}
foo(1); // 2
foo(3); // 6
foo(3, 2);//6
// 2、箭头函数中无法使用arguments
// ReferenceError: arguments is not defined
var func = (a, b) => {
return arguments[0];
}
2、箭头函数没有prototype属性
var Foo = () => {};
console.log(Foo.prototype); // undefined
3、箭头函数不能使用new
箭头函数没有this,不能用作构造函数,也就无法使用 new
var Foo = () => {};
var foo = new Foo(); // TypeError: Foo is not a constructor
4、箭头函数没有this
普通函数、对象方法中的this,都是在运行时定义。