#一、函数的作用
函数可以封装任意多条语句,可以方便在任何地方,任何时候调用执行
二、函数的定义
函数有三种定义方式:
- 函数声明方式
- 函数表达式方式
- 使用function构造函数
1.函数声明
函数声明定义函数是最常用的。
语法:
function functionName([arg0,arg1,arg2,...argn]){
...
}
例子:
//sum(1,2);
function sum(num1,num2){
console.log(num1+num2);
}
//sum(1,2);
函数调用的位置随便,不受影响,这 涉及到函数声明提升 下面再将
说明:
- function functionName是要定义的函数名,属于标识符
- []中的arg0,arg1,…argn为函数的参数
- []只是说明里面的内容不是必须的,不是语法
2.函数表达式
语法:
var functionName = function([arg0,arg1,arg2,...]){
//要执行的语句
}
例子:
var sum = function(num1,num2){
console.log(num1+num2);
}
sum(1,2);
函数调用的位置只能在声明后面
3. 使用Function构造函数
Function构造函数可以接收任意数量的参数,最后一个参数为函数体,其他的参数则枚举出新函数的参数。
语法:
var 函数名 = new Function("参数1","参数2",...,"参数n","函数体");
4.arguments
ECMAScript中的参数在内部用一个数组来表示,
在函数体中通过arguments对象来方法这个数组参数。
注意:
- arguments对象只是与数组类似,并不是Array实例
- []语法可以访问它的每一个元素
- length属性确定传递参数的个数
三.函数声明提升 和 声明方式的选择
js引擎会在预编译时,也就是代码执行之前,将函数声明放到源代码的顶部,而变量赋值操作留在原来的位置。所以,即使函数声明在调用它的代码后,js引擎也能把函数声明提升到顶部。
常用的两种函数创建方式(第三种我没用过(- - !))
- 函数声明
- 函数表达式
函数声明
sum(1,2);
function sum(num1,num2){
console.log(num1+num2);
}
//sum(1,2);
无论函数调用在函数声明前还是后,控制台都可以输出3,这就是函数声明提升的作用
函数表达式
sum(1,2);
var sum = function(num1,num2){
console.log(num1+num2);
}
运行上面代码,会报错:Uncaught ReferenceError: sum is not defined(…),错误信息显示说sum没有被定义。 函数表达式定义的函数属于变量赋值操作,会被留在原地,不会享受函数声明提升到顶部的特权。
所有使用函数表达式,函数的调用必须是在函数表达式的后面。
函数定义方式的选择
- 函数声明:推荐。js引擎在预编译时会进行函数声明提升。
- 函数表达式:一般,函数调用要在函数定义之后。
- Function构造函数:不推荐,这种方式会导致解析两次代码,影响性能。第一次解析常规的JavaScript代码,第二次解析传入构造函数的字符串。