详谈javascript的函数
- 函数是什么
- 函数的创建
- 函数的调用
- 函数的参数
- 函数对象的功能
- 函数的返回值
函数是什么
首先,函数是一种对象。
其次,函数可以封装一些功能代码,在需要时执行这些功能代码。
函数的创建
//多种方法创建函数
一:代码说明
//方法一:new关键字创建函数
var fun1 = new Function();
//方法二:函数声明创建函数
function fun2(){
//封装代码...
}
//方法三:函数表达式创建函数
var fun3 = function(){
//封装代码...
}
//方法四:构造函数创建函数(不建议使用)
var fun4 = new Function(
//封装代码...
);
二:文字说明
方法一:new关键字创建函数
var fun1 = new Function();
方法二:用函数声明创建函数
语句:function 函数名(参数1,参数2,...,参数n){封装代码..}
例子:
function fun2(){
alert("嘿嘿嘿");
}
方法三:函数表达式创建函数
语句:var 函数名 = function(参数1,参数2,...,参数n){封装代码..}
说明:这里的function(){}是个匿名函数,将这个匿名函数赋值给函数名
例子:
var fun3 = function(){
alert("嘿嘿嘿");
}
方法四:构造函数创建函数(基本不用)
var fun = new Function(
"嘿嘿嘿"
); //封装的代码传给构造函数,实际开发中基本不使用构造函数来创建对象
函数的调用
封装到函数的代码不会立即执行,而是在调用函数时执行。当调用函数时,封装的代码会按照顺序执行。
语法:函数对象()
例如:fun()
<script>
//函数表达式创建函数
var fun = new Function(alert("嘿嘿"));
fun();
</script>
函数的参数
形参:
可以在函数的()中来指定一个或多个形参(形式参数),多个参数用,隔开,声明形参就相当于在函数内部声明对应的变量。
var sum = function(a,b){
alert(a+b);
}
实参:
调用函数时,可以在函数的()中指定实参(实际参数),实参会赋值给函数中对应的形参。实参可以是任意数据类型
调用函数时,解析器(浏览器)不会检查实参的类型。
调用函数时,解析器(浏览器)不会检查实参的数量,如果实参的数量少于形参的数量,则未对应的形参值为undefined。如果实参的数量多于形参的数量,多余的实参不会被赋值。
sum(5,3); //结果为8
sum("5",3); //结果为字符串"53"
sum(5); //结果为非数值NaN,undefined是非数字,与任何值相加都得NaN
sum(5,3,10); //结果为8,多余的实参10被抛弃
参数可以是对象
因为实参可以是任意数据类型,所以参数可以用对象表示,把一系列的参数用对象封装,就解决了参数过多的问题。
举例:创建一个函数student(),实参是stu对象
//大括号创建对象并添加属性
var stu = {
name: "小明",
age: 18,
address: "北京",
department: "软件工程"
}
function student(obj){
document.write("我叫"+obj.name+",今年"+obj.age+"岁,来自"+obj.address+",专业是"+obj.department);
}
//调用student()函数,stu对象作为参数
student(stu);
参数可以是函数
举例1:创建一个新的函数fun2(),实参是student()函数
//大括号创建对象并添加属性
var stu = {
name: "小明",
age: 18,
address: "北京",
department: "软件工程"
}
function student(obj){
document.write("我叫"+obj.name+",今年"+obj.age+"岁,来自"+obj.address+",专业是"+obj.department);
}
//函数表达式创建函数fun2
var fun2(a) = function{
a(stu);
}
//调用函数fun2,参数为函数student
fun2(student);
举例2:创建一个新的函数fun(),实参是匿名函数
//函数表达式创建函数
var fun(a) = function{
alert("a="+a);
}
//fun调用匿名函数
fun(function(){alert(我是匿名函数);});
问题:student和student()有什么区别?
student是函数
student()是调用student函数,如果有返回值,student()就等于返回值后面的值!
注意:将函数当参数用,还是函数返回值当参数要分明!!!
注意:将函数当参数用,还是函数返回值当参数要分明!!!
注意:将函数当参数用,还是函数返回值当参数要分明!!!
函数对象的功能
功能一:因为函数也是对象,对象能做的事函数都能做
对象名.属性 = 属性值
函数名.属性 = 属性值
例如
var fun = new Function();
fun.name = "属性名";
fun.digit = 321;
函数的返回值
调用函数后,变量return的值就是函数的执行结果
说明:
1、return可以返回的值可以是任意数据类型
2、return后的语句不会执行
3、alert()也是一个函数,但是没有返回值,返回值是undefined(未定义)
//函数声明时创建函数
function fun(a,b,c){
var d = a+b+c;
return d;
//return后的语句不会执行
return 100; //未执行
}
var sum;
//调用函数并将返回值赋给sum
sum = fun(1,2,3);
alert("sum="+sum); //输出sum=6