17.箭头函数和普通函数区别
时间: 2024-05-19 22:14:53 浏览: 90
箭头函数和普通函数的主要区别在于它们的 this 绑定方式不同。箭头函数的 this 始终指向它的外层函数,而普通函数的 this 在不同的情况下指向不同的对象,比如全局对象、调用它的对象或者使用 call/apply/bind 方法指定的对象。此外,箭头函数也没有自己的 arguments 对象。
相关问题
箭头函数和普通函数区别
箭头函数和普通函数在语法和功能上有一些区别。
1. 语法简洁性:箭头函数使用箭头(=>)来定义,省略了`function`关键字和大括号。如果函数体只有一条语句,箭头函数可以省略`return`关键字,并且自动返回该语句的结果。例如:
```javascript
// 普通函数
function add(a, b) {
return a + b;
}
// 箭头函数
const add = (a, b) => a + b;
```
2. `this`的指向:箭头函数没有自己的`this`绑定,它会继承外层作用域的`this`。而普通函数的`this`指向调用它的对象或者全局对象(在严格模式下为`undefined`)。
```javascript
// 普通函数
const obj = {
name: 'Alice',
sayHello: function () {
console.log(`Hello, ${this.name}`);
}
};
obj.sayHello(); // 输出: Hello, Alice
// 箭头函数
const obj = {
name: 'Alice',
sayHello: () => {
console.log(`Hello, ${this.name}`);
}
};
obj.sayHello(); // 输出: Hello, undefined
```
3. 构造函数:箭头函数不能用作构造函数,不能使用`new`关键字创建实例。普通函数可以用作构造函数,并且可以创建实例对象。
```javascript
// 普通函数
function Person(name) {
this.name = name;
}
const alice = new Person('Alice');
console.log(alice.name); // 输出: Alice
// 箭头函数
const Person = name => {
this.name = name;
};
const alice = new Person('Alice'); // 报错: Person is not a constructor
```
总的来说,箭头函数更适合简单的、短小的函数,而普通函数则更灵活,适用于各种场景。
箭头函数和普通函数的区别
箭头函数是一种简洁的函数形式,与普通函数有以下几个区别:
1. 语法不同:箭头函数使用 `=>` 来定义函数,其语法更加简洁明了,而普通函数则使用 `function` 关键字定义。
2. this 的指向不同:在普通函数中,`this` 的指向是动态的,根据函数的调用方式不同会有不同的指向;而在箭头函数中,`this` 的指向一定是继承自上下文环境的,即箭头函数的 `this` 始终与其定义时的上下文环境中的 `this` 相同。
3. 不能使用 arguments 对象:箭头函数没有自己的 `arguments` 对象,也不能通过 `arguments` 访问传递给函数的参数列表。
4. 不能作为构造函数使用:箭头函数没有 `prototype` 属性,也不能使用 `new` 关键字来实例化。
5. 不能使用 yield 关键字:箭头函数不能用于定义生成器函数,因为没有 `yield` 关键字。
阅读全文