**const f = function () { ... }**
是一个函数表达式**function() { ... }**
是一个匿名函数- 匿名函数常用于将函数作为参数来传递的场景中,比如:
- 函数表达式
- 回调
- 匿名函数没有函数名,若需要调用匿名函数,可使用立即执行函数的写发来调用匿名函数
通过这篇文档主要介绍“函数表达式”和“匿名函数”这俩词的概念。函数表达式、匿名函数,它们是两个不同但相关的概念。但在实际使用中,人们往往会将它们混用。
函数表达式(Function Expressions)
函数表达式是常见的定义函数的方法,它使用 function 关键字,后跟函数名、参数列表和函数体。这个被赋值的函数可以是有名字的,也可以是匿名的。
// 这是一个函数表达式
var greet = function sayHello() {
console.log("Hello Wrold!");
};
// 这也是一个函数表达式,但这次我们使用了一个匿名函数
var greet = function() {
console.log("Hello Wrold!");
};
JS 中,函数也是一个数据,语法上,函数可以用于任何需要数据的地方。函数是一个引用类型,将其赋值给某个变量时,变量中保存的是函数的地址。函数表达式的函数名可以省略,因为没有意义,没啥用。
- 函数表达式的值就是函数本身。
- 当函数成为一个表达式时,它既不会提升(函数声明会提升),也不会污染全局对象。
函数表达式的常见形式:
// 赋值表达式中
const test = function () {
// => 函数体
}
// 小括号中
(function () {})
// 对象的成员
const obj = {
test: function () {},
}
// 数组的成员
const arr = [
function () {},
];
匿名函数(Anonymous Functions)
匿名函数是一种没有名字的函数。它可以用于函数表达式,也可以用于其他需要使用函数但不需要函数名的地方(如函数作为参数传递等)。
// 这是一个匿名函数
function() {
console.log("Hello Wrold!");
}
// 作为回调函数使用的匿名函数
setTimeout(function() {
console.log('Hello Wrold!');
}, 1000);
所以,所有匿名函数都可以用于函数表达式,但并非所有函数表达式都必须使用匿名函数。它们的关系是交叉的,但它们代表的是不同的概念。
由于匿名函数并没有函数名,若我们想要执行一个匿名函数,可以使用立即执行函数的写法来实现,比如:
(function() {
console.log("Hello Wrold!");
})()