函数表达式

这个功能关键字可用于定义表达式内的函数。

您还可以使用功能宣言箭头语法.

试试看

语法

js公司
函数(参数0){声明}函数(param0,param1){声明}函数(param0,param1,/*…,*/paramN){声明}函数名(param0){声明}函数名(param0,param1){声明}函数名(param0,param1,/*…,*/paramN){声明}

注:表达式语句不能以关键字开头功能以避免与功能宣言. The功能关键字仅在表达式出现在无法接受语句的上下文中时才开始表达式。

参数

名称 可选

函数名称。可以省略,在这种情况下,函数是匿名的。该名称仅限于函数体。

参数N 可选

函数的形式参数的名称。有关参数的语法,请参见函数参考.

声明 可选

构成函数体的语句。

描述

A类功能表达式与功能宣言. The main difference between a功能表达式和a功能声明是函数名称,在中可以省略功能要创建的表达式匿名的功能。A类功能表达式可以用作IIFE公司(立即调用函数表达式),定义后立即运行。另请参阅关于功能了解更多信息。

函数表达式提升

JavaScript中的函数表达式不会被提升,这与函数声明。在创建函数表达式之前不能使用它们:

js公司
console.log(未提升);//未定义//即使变量名被挂起,//定义不是。所以它是未定义的。notHoisted();//TypeError:notHoisted不是函数var notHoisted=函数(){console.log(“bar”);};

命名函数表达式

如果要引用函数体中的当前函数,则需要创建命名函数表达式。然后,此名称仅限于函数体(作用域)。这避免了使用不推荐的参数.被叫属性以递归方式调用函数。

js公司
常量数学={factit:函数阶乘(n){控制台.log(n);如果(n<=1){返回1;}返回n*阶乘(n-1);},};数学事实(3)//三;2;1;

如果命名了函数表达式,则名称函数的属性被设置为该名称,而不是从语法推断出的隐式名称(例如函数被赋给的变量)。

与声明不同,函数表达式的名称是只读的。

js公司
函数foo(){foo=1;}foo();console.log(foo);//1(函数foo(){foo=1;//TypeError:赋值给常量变量。})();

示例

使用函数表达式

下面的示例定义了一个未命名的函数并将其赋值给x个。该函数返回其参数的平方:

js公司
常数x=函数(y){返回y*y;};

使用函数作为回调

更常见的是,它被用作回调:

js公司
button.addEventListener(“点击”,函数(事件){console.log(“点击按钮!”);});

使用立即调用的函数表达式(IIFE)

创建并调用匿名函数:

js公司
(函数(){console.log(“代码运行!”);})();//或!函数(){console.log(“代码运行!”);}();

规格

规范
ECMAScript语言规范
#安全功能定义

浏览器兼容性

BCD表仅在浏览器中加载

另请参见