函数表达式
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Please take two minutes to fill out our short survey.
语法
参数
name
-
函数名称。可被省略,此种情况下的函数是匿名函数(anonymous)。函数名称只是函数体中的一个本地变量。
paramN
-
被传递给函数的一个参数名称。一个函数至多拥有 255 个参数。
statements
-
构成函数体的语句。
描述
函数表达式提升 (Function expression hoisting)
JavaScript 中的函数表达式没有提升,不像函数声明,你在定义函数表达式之前不能使用函数表达式:
js
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function () {
console.log("bar");
};
具名函数表达式
如果你想在函数体内部引用当前函数,则需要创建一个具名函数表达式。然后函数名称将会(且只会)作为函数体(作用域内)的本地变量。这样也可以避免使用非标准的 arguments.callee 属性。
js
var math = {
factorial: function factorial(n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
},
};
被函数表达式赋值的那个变量会有一个 name 属性,如果你把这个变量赋值给另一个变量的话,这个 name 属性的值也不会改变。如果函数是一个匿名函数,那 name 属性的值就是被赋值的变量的名称(隐藏值)。如果函数不是匿名的话,那 name 属性的值就是这个函数的名称(显性值)。这对于箭头函数也同样适用(箭头函数没有名字,所以你只能赋予 name 属性一个隐性名)。
js
var foo = function () {};
foo.name; // "foo"
var foo2 = foo;
foo2.name; // "foo"
var bar = function baz() {};
bar.name; // "baz"
console.log(foo === foo2); //true
console.log(typeof baz); // undefined
console.log(bar === baz); // false (errors because baz == undefined)
示例
下面的例子定义了一个匿名函数并把它赋值给变量 x。这个函数返回它参数的平方:
js
var x = function (y) {
return y * y;
};
更多情况下被当作回调函数使用:
js
button.addEventListener("click", function (event) {
console.log("button is clicked!");
});
规范
Specification |
---|
ECMAScript® 2026 Language Specification # sec-function-definitions |