Javascript脚本语言允许开发者通过编写函数的方式组合一些可重复使用的代码块,增加了脚本代码的结构化和模块化。函数是通过参数接口进行数据传递,以实现特定的功能。
一、函数的创建及调用
函数的创建大致有三种方法:
方法一:function functionName([parameters]){functionBody};
Example:
function add(a,b) { return a + b; } //alert(add(2,3));
当我们这样声明函数时,函数的内容被解释(只有调用函数时,才会执行),同时一个名为Add的对象被创建。
方法二:将一个匿名函数赋值给一个变量(var)
Example a:
var add = function (a,b) { alert(a+b); } //add(3,4);
这种声明的语法看起来怪异,但是它能更好的让我们理解“函数即对象”。通过这种方式声明的函数同样是被执行而没有被执行。
Example b:
var obj = new Object(); obj.add = function (a,b) { alert(a+b); } //obj.add(1,10);
这个例子表明,当我们需要将一个自定义函数作为某个对象的属性时,这种函数的定义方式是非常有用的。
方法三:通过Function对象来创建函数
语法:var Name=new Function([param1Name, param2Name,...paramNName], functionBody);
var add = new Function("a", "b", "alert(a+b)"); //add(2,4);
Function是对象(创建函数的对象)。实际上,在javascript中声明一个函数本质上为创建Function对象的一个实例,而函数名则为实例名。
二、函数的参数
与其他程序设计语言不同,javascript不会验证传递给函数的参数个数是否等于函数定义的参数个数。如果传递的参数个数与函数定义的参数个数不同,则函数执行起来有可能会产生一些意想不到的错误,任何遗漏的参数都会以Undefined传递给函数,多余的参数将忽略。为了避免错误,应该让传递的参数个数与函数定义的参数个数相等。在javascript中提供了一个arguments数组对象,该对象可以获取从javascript代码中传递给函数的参数。
Example:
function add(x,y) { if (arguments.length != 2) { var str = "传递的参数个数有误,一共传递了" + arguments.length + "个参数,分别为: "; for (var i = 0; i < arguments.length; i++) { str += "第" + (i + 1) + "个参数的值为:" + arguments[i] + " "; } return str; } else { var z = x + y; return z; } } console.log("add(2,4,6):"+add(2,4,6));
运行结果:
注:可以通过typeof来判断函数参数传递的类型。
三、函数的属性与方法
在javascript中,函数也是一个对象。既然函数是对象,那么函数也拥有自己的属性以及方法。
1.length属性
在这里需要区别arguments对象的length属性,函数的length属性可以获得函数定义的参数个数而arguments对象的length属性是获得实际传递给函数的参数的个数。函数的length属性能在函数体之外使用,而arguments的length属性只能在函数体内访问。
Example:
function add(x, y) { if (add.length != arguments.length) { return "传递过来的参数个数与函数定义的参数个数不一致!"; } else { var z = x + y; return z; } } console.log("函数add的length值为:" + add.length); console.log("add(3,4):" + add(3, 4)); console.log("add(3,4,5)" + add(3, 4, 5));
运行结果:
2、函数的方法(以Call()与apply()为例)
在javascript中每个函数都有Call()与apply()方法,函数可以像其他对象一样来调用这两个方法,这两个方法的作用都是将函数绑定到另一个对象上运行,两者仅在定义参数的方式上有所不同。
call()的使用语法格式如下:
函数名.call(对象名,参数1,参数2,...)
apply()的使用语法格式如下:
函数名.apply(对象名,数组)
Example:
function getsum() { var sum=0; for (var i = 0; i < arguments.length;i++) { sum += arguments[i]; } return sum; } var obj = new Object(); var arr = [1, 3, 5]; console.log("sum1:" + getsum.call(obj, 2, 4, 6)); console.log("sun2:"+getsum.apply(obj,arr));
运行结果: