JavaScript 的函数
定义:函数是指封装一些语句代码的一个对象。一次声明,可多次调用。
函数是一个对象。
创建函数的3种方式
- 使用
构造函数
来创建,不推荐使用。
var fun = new Function();
这时候创建的是一个空的函数,既没有任何功能的函数。为了使函数拥有功能,可以将一些代码以字符串的形式作为参数,初始化函数。
var fun = new Function("alert('函数');");
这个函数的功能是弹出一个窗口。
- 使用
函数声明
来创建
语法:function 函数名([形参1,形参2,...,形参N]){ 语句 }
function fun(){
alert("函数声明");
}
- 使用
函数表达式
来创建
语法:var 函数名=function([形参1,形参2,...,形参N]){ 语句 };
var fun = function(){
console.log("haha");
};
函数创建后,并不会立刻执行,需要调用函数才执行。
调用函数
语法:函数名([形参1,形参2,...,形参N]);
fun();
函数的参数
- 形参:形式参数
- 实参:实际参数
- 调用函数时,通过实参给函数传值,实参将值赋给形参进行计算。
- 调用函数时,浏览器解析器不会检查
实参类型
,最好在函数内加于判断实参类型,避免出现错误。 - 调用函数时,浏览器解析器不会检查
实参个数
,当实参多于形参时,后面多余的实参不会参与赋值,直接忽略;形参多于实参时,多余的形参赋值为 undefined 类型。 - 实参可以是
任意类型
的数据。
函数的返回值
语法:return 返回值;
返回值是该函数执行后返回的结果。可以是任意类型
的数据。
通常放在函数的最后。因为执行到 return 语句将结束该函数了,如果 return 语句后还有语句,这些语句将会变成死语句(永远不会执行)了。
一个函数可以有多个返回接口,但是尽量使用变量赋值的形式,只写一个返回接口,这便于理解函数功能。
如果 return 后没有返回值,或函数没有 return 语句,该函数的返回结果都是 undefined 。
函数是一个具有特定功能的对象。
前面说到了函数是一个对象,函数的参数可以是任意类型的数据。所以函数的参数也可以是一个对象或函数。
参数是对象的例子:
function showMsg(x){ //展示一个对象的信息
console.log(x.name);
console.log(x.age);
console.log(x.gender);
}
var obj = {
name:"lin",
age:18,
gender:"男"
}
showMsg(obj);
参数是函数的例子:
function showMsg(x){ //展示一个对象的信息
console.log(x.name);
console.log(x.age);
console.log(x.gender);
}
function fun(x){
console.log(x);
}
fun(showMsg);
当将函数 A 当成一个实参传入函数 B 时,可以在函数 B 中,执行函数 A 。如:
function showMsg(x){ //展示一个对象的信息
console.log(x.name);
console.log(x.age);
console.log(x.gender);
}
var obj = { //声明一个对象
name:"lin",
age:18,
gender:"男"
}
function fun(x){
x(obj); //调用传入的函数 A
}
fun(showMsg); //调用函数 B
//fun(showMsg(obj)); //相当于直接调用了 showMsg 函数,这时候形参x接收的是 showMsg 函数的返回值 undefined。
函数的返回值也可以是任意类型的数据。当函数的返回值是一个函数时,如何调用返回的函数。
function fun1(){
alert("我是外部函数1");
function fun2(){
alert("我是内部函数2");
}
//fun2(); //在fun1中调用fun2
return fun2; //返回一个函数
}
var a = fun1(); //将fun1返回的函数赋给a,a等价于fun2
console.log(a);
a(); //相当于调用fun2
//fun1()(); //等价于调用了 fun1 和 a 函数
注意:函数名
与 函数名()
的区别
函数名
只是指函数的本体代码。
函数名()
调用了这个函数,指的是执行这个函数的返回值。
立即执行函数
语法:
(function([形参1,形参2,...,形参N]){
语句
})([形参1,形参2,...,形参N]);
立即执行函数声明时即调用,通常是匿名函数,只调用一次。
(function(x,y){
console.log( "x = " + x);
console.log( "y = " + y);
})(123,456);