JavaScript参考手册
Operators
function
function
关键字可以用来在一个表达式中定义一个函数。
你也可以使用 Function 构造函数和一个函数声明来定义函数。
语法
var myFunction = function [name]([param1[, param2[, ..., paramN]]]) {
statements
};
从ES2015开始,你也可以使用箭头函数。
参数
name
函数名称。可被忽略,此种情况下的函数是匿名函数(anonymous)。 函数名称只是函数体中的一个本地变量。
paramN
被传递给函数的一个参数名称。一个函数至多拥有 255 个参数。
statements
构成函数体的语句。
描述
函数表达式(function expression)非常类似于函数声明(function statement)(详情查看函数声明),并且拥有几乎相同的语法。函数表达式与函数声明的最主要区别是函数名称(function name),在函数表达式中可忽略它,从而创建匿名函数(anonymousfunctions)。一个函数表达式可以被用作一个IIFE(即时调用的函数表达式),它一旦定义就运行。更多信息请查看函数。
函数表达式提升 (Function expression hoisting)
JavaScript中的函数表达式没有提升,不像函数声明,你在定义函数表达式之前不能使用函数表达式:
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function() {
console.log('bar');
};
命名函数表达式(Named function expression)
如果你想在函数体内部引用当前函数,则需要创建一个命名函数表达式。然后函数名称将会(且只会)作为函数体(作用域内)的本地变量。这样也可以避免使用非标准的 arguments.callee 属性。
var math = {
'factorial': function factorial(n) {
if (n <= 1)
return 1;
return n * factorial(n - 1);
}
};
被函数表达式赋值的那个变量会有一个name属性,如果你把这个变量赋值给另一个变量的话,这个name属性的值也不会改变。如果函数是一个匿名函数,那name属性的值就是被赋值的变量的名称(隐藏值)。如果函数不是匿名的话,那name属性的是就是这个函数的名称(显性值)。这对于箭头函数也同样适用(箭头函数没有名字,所以你只能赋予name属性一个隐性名)。
var foo = function() {}
foo.name // "foo"
var foo2 = foo
foo2.name // "foo"
var bar = function baz() {}
bar.name // "baz"
示例
下面的例子定义了一个匿名函数并把它赋值给变量x。这个函数返回它参数的平方:
var x = function(y) {
return y * y;
};
更多情况下被当作回调函数使用:
button.addEventListener('click', function(event) {
console.log('button is clicked!')
})
规范
Specification |
Status |
Comment |
---|---|---|
ECMAScript Latest Draft (ECMA-262)The definition of 'Function definitions' in that specification. |
Living Standard |
|
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Function definitions' in that specification. |
Standard |
|
ECMAScript 5.1 (ECMA-262)The definition of 'Function definition' in that specification. |
Standard |
|
ECMAScript 3rd Edition (ECMA-262)The definition of 'Function definition' in that specification. |
Standard |
Initial definition. Implemented in JavaScript 1.5. |
浏览器兼容性
Feature |
Chrome |
Edge |
Firefox (Gecko) |
Internet Explorer |
Opera |
Safari |
---|---|---|---|---|---|---|
Basic support |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
Trailing comma in parameters |
? |
? |
52.0 (52.0) |
? |
? |
? |
Feature |
Android |
Chrome for Android |
Edge |
Firefox Mobile (Gecko) |
IE Mobile |
Opera Mobile |
Safari Mobile |
|
---|---|---|---|---|---|---|---|---|
Basic support |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
(Yes) |
|
Trailing comma in parameters |
? |
? |
? |
52.0 (52.0) |
? |
? |
? |
? |
Operators相关
JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络