函数定义
函数也是一个对象
与普通对象区别
可以封装某一些功能(代码),在需要时执行
创建函数的三种方式
一、new运算符创建函数(此方法开发禁止使用,只是为了说明函数是一个对象)
var fun1 = new Function("console.log('这是一个函数')");
fun1();
console.log(fun1);
输出结果:
fun1()与fun1的区别:
fun1():调用函数——语法:函数对象名();
fun1:函数对象;
二、使用函数声明创建函数
语法:
function 函数名([形参1,形参2,...形参N]){
语句
}
举例:
function fun2(){
console.log("这是我第二个函数");
}
fun2();
console.log(fun2);
输出结果:
三、使用函数表达式来创建一个函数
语法:
var 函数名 = function([形参1,形参2,...形参N]){
语句;
}
此时等号右边为匿名函数,赋值给函数变量,所以为函数表达式
举例:
var fun3=function(){
console.log("这是我第三个函数");
}
fun3();
输出结果:
函数参数——形参与实参
形参
形式参数,可以在函数的()中来指定一个或多个形参,多个形参之间使用,隔开
声明形参就相当于在函数内部声明了对应的变量,但是并不赋值
举例说明:
function sum(a,b){
console.log(a+b);
}
与此效果相同的代码(在使用的时候不能这么写,接收不了外部实参)
function sum(){
var a;
var b;
console.log(a+b);
}
此时a,b便为形参
实参
在调用函数时,可以在()中指定实参(实际参数),实参将会赋值给函数中对应的形参
举例:调用上面的函数
sum(1,2);
此时1,2便为实参
实参的值可以是一个对象,也可以是一个函数
实参的值是一个对象
适用情况(大多数都适用):当参数过多时,可以将参数封装到一个对象中,然后通过对象传递
举例:输出一个人的信息
function sayHello(name,age,gender,address){
console.log("我是"+name+",今年我"+age+"岁了,"+"性别是"+gender+",地址是"+address)
}
//调用函数
sayHello("小工",15,'男',"中国");
将参数(name,age,gender,address)用对象obj封装起来,传入对象
function sayHi(o){
console.log("我是"+o.name+",今年我"+o.age+"岁了,"+"性别是"+o.gender+",我住在"+o.address);
}
//封装对象
var obj={
name:"小工",
age:15,
gender:'男',
address:"中国"
}
//调用函数
sayHi(obj);
这两种的输出结果一致
实参的值是一个函数
举例:将sayHi函数对象传入另一个函数
function fun(a){
a(obj);
}
fun(sayHi);
与直接调用sayHi()函数输出结果一致
可以这么理解:sayHi对象中存放sayHi函数的指针(地址值),将指针传给a后,a有sayHi函数的地址,可以直接调用sayHi函数
返回值
用return来设置函数返回值
语法: return 值;
值可以是任意的数据类型,下面举三个例子——返回原始数据类型:number、返回一个对象、返回一个函数
返回number
function sum(a,b,c){
var d=a+b+c;
return d;
}
//调用函数
var result= sum(1,2,3);
console.log(result);
返回一个对象
function fun2(){
//返回一个对象
return {name:"沙和尚"};
}
//变量a接收
var a = fun2();
//输出a.name
console.log("名字是"+a.name);
返回一个函数对象返回(fun4函数指针)
function fun3(){
//在函数内部声明一个函数
function fun4(){
console.log("我是fun4");
}
//将函数对象返回
return fun4;
}
调用fun3执行fun4函数
//用变量b接收fun4指针
var b= fun3();
b();
或者直接使用
fun3()();
输出结果:我是fun4
返回一个函数(fun4())
function fun3(){
//在函数内部声明一个函数
function fun4(){
console.log("我是fun4");
}
//将函数返回
return fun4();
}
//调用fun3函数
fun3();
立即执行函数
将匿名函数用()括起来之后变为一个立即执行函数,函数只会被调用一次
举例:
(function(a,b){
console.log("a="+a);
console.log("b="+b);
})(123,456);