📅  最后修改于: 2023-12-03 15:25:16.246000             🧑  作者: Mango
在Javascript中,函数是一等公民,这意味着函数可以作为参数传递给其他函数,也可以从函数中返回。Javascript中有两种定义函数的方式:传统函数和箭头函数。
传统函数使用关键字function
来定义。它们可以有任意数量的参数,并且可以有一个返回值。以下是一个传统函数的基本结构:
function functionName(param1, param2, ...) {
// 函数体
return value;
}
this
关键字:传统函数中的this
关键字是在调用时确定的,它的值取决于调用函数的方式。const obj = {
name: 'John',
printName() {
console.log(this.name);
}
};
obj.printName(); // "John"
const print = obj.printName;
print(); // undefined
在这个例子中,当我们直接调用对象的printName
函数时,this
关键字指向了obj
对象,所以它打印了名字。但是当我们将printName
函数分配给一个变量并调用它时,this
关键字的值是未定义的,因此它输出undefined
。
new
关键字来创建一个新的对象。function Person(name, age) {
this.name = name;
this.age = age;
}
const john = new Person('John', 30);
console.log(john); // { name: 'John', age: 30 }
在这个例子中,我们使用new
关键字创建了一个名为john
的新对象,并将其传递给Person
构造函数。Person
函数将在新对象上设置name
和age
属性,最后返回john
对象。
function
来定义,这使得函数的定义变得冗长。箭头函数引入了一种新的函数定义方式,可以使用=>
符号来定义函数。箭头函数的语法更简洁,并且它们具有一些不同的行为,与传统函数有一些区别。以下是箭头函数的基本结构:
(param1, param2, ...) => {
// 函数体
return value;
}
function
,这样可以减少代码中的噪音。const sum = (a, b) => a + b;
在这个例子中,我们定义了一个名为sum
的函数,它使用箭头函数语法来返回参数a
和b
的和。
this
关键字:箭头函数中的this
关键字是在定义函数时确定的,它的值与定义函数时所在的上下文有关,而不是调用时的上下文。const obj = {
name: 'John',
printName: function() {
setTimeout(() => {
console.log(this.name);
}, 100);
}
};
obj.printName(); // "John"
在这个例子中,当我们调用obj.printName()
时,它会设置一个定时器来打印this.name
的值。由于我们在箭头函数中使用了this.name
,它的价值等于printName
函数定义时的this
值,即obj
对象。
new
关键字来创建对象。const Person = (name, age) => {
this.name = name;
this.age = age;
};
const john = new Person('John', 30); // 抛出 TypeError
在这个例子中,我们试图创建一个名为john
的新对象,并将其传递给一个名为Person
的箭头函数。但是,由于箭头函数不能用作构造函数,我们不能使用new
关键字来创建一个新对象,这会导致一个类型错误。
传统函数和箭头函数都有它们的优点和缺点。传统函数更灵活,可以用作构造函数,并且提供确定的this
关键字。另一方面,箭头函数更加简洁,并且提供确定的this
关键字,但不能用作构造函数。当使用函数时,需要根据具体情况权衡并选择哪种函数定义方式。