在js中函数也是对象,因此可以把它赋给一个变量,一个数组元素,甚至作为参数传给另一个函数调用
函数的定义
- 声明式的静态方式(所有浏览器都支持)
function 函数名(形参列表){函数体}//注意没有var否则报错,且function必须小写
①这种方式最常用,他只需定义一次,在程序的完整过程中,他一直被存在内存中,只在页面打开时解析一次,不论是什么调用它,返回的都是函数体处理完的结果
②要设定返回值,他可以有0个到多个return,一般多个return 都用在需要判断条件时,即满足这个条件就不往下执行函数体内容
③参数方面注意传参形式,一种是传值,一种是传地址,简单点说就是传值不改变实参,传地址改变实参1
2
3
4
5
6
7
8
9
10function change(str1,arr) {
str1 = "hello javascript!";
arr[arr.length] = "three";
}
var str = "hello world!";
var arr1 = ["one","two"];
change(str,arr1);
document.write(arr1);//传地址,改变
document.write("<br />");
document.write(str);//传值,不变
结果:1
2one,two,three
hello world!
- 匿名函数(没有函数名,又叫动态函数,较新的浏览器支持)
var hd = new Function("参数1","参数2","函数结构体")//F必须大写,必须是new
匿名函数是用一次定义一次,直接赋给变量
这种方式不常用,但是在只有运行时才能确定函数成立条件时,创建动态函数就很有必要1
2
3
4
5
6
7
8
9var func = prompt("请输入函数体");
var x = parseInt(prompt("请输入x"));
var y = parseInt(prompt("请输入y"));//注意promt返回的是字符串若不转换结果就是23
var op = new Function("x","y",func);
var result = op(x,y);
document.write("function is "+func+"<br />");
document.write("x is"+x+"<br />");
document.write("y is"+y+"<br />");
document.write("result is"+result);
结果:1
2
3
4function is return x+y
x is2
y is3
result is5
- 函数直接量(即赋给变量或作为另一函数的参数,新的浏览器支持7)
①var func = (参数列表){函数体}//兼具了匿名函数和声明函数
②var func = 函数名(参数列表){函数体}
③1
2
3
4function fan(x,y,z){
document.write((z(x,y)));
}
fan(1,2,function(x,y){return x+y});//函数作为参数
结果:3
回调函数
回调函数可以理解成,将回调函数作为参数放在一个新函数里,然后执行过程就是先执行新函数再反过来执行回调函数1
2
3
4
5
6
7
8
9//定义回调函数
function fun1(value){
document.write(value);
}
//定义新函数并把回调函数作为参数
function fun2(fun,value){
fun(value);
}
fun2(fun1,"hi js!")
结果:hi js!
函数对象
1 | function func(){ |
结果:123