Javascript中有3种创建函数的方法:声明式的/静态的 、动态的/匿名的 、字面量式的。
函数的命名规范
通常以动词开头,然后跟上一个或多个名词,每个名词的首字符都是大写字母。
声明式的函数
function functionname (param1, param2, ....... , paramn){
Function statements;
}
函数返回值和参数
参数中的变量传给函数的实际上是原始值,如一个字符串、一个布尔值、一个数字等。在函数中修改参数值,不会影响实际值。
对于传给函数的对象而言传递的则是一个引用。在函数中修改这个对象将会反映在调用程序中。
例1:
function alterArgs(strLiteral,aryObject){
strLiteral = "override";
aryObject[1] = "2";
aryObject[aryObject.length] = "three";
}
function testParams(){
var str = "Original Literal";
var ary = new Array("one","two");
document.writeln("string literal is "+ str + "<br />");
document.writeln("Array object is "+ ary +"<br /><br />");
alterArgs(str,ary);
document.writeln("string literal is "+ str + "<br />");
document.writeln("Array object is "+ ary +"<br /><br />");
}
浏览器输出为:
string literal is Original Literal
Array object is one,two
string literal is Original Literal
Array object is one,2,three
匿名函数
函数就是一个对象。因此,可以像创建字符串、数组那样通过一个构造器创建它们,并将该函数赋给一个变量。匿名函数本身并不是直接声明的,也没有对其进行命名。
当Javascript解析它时,和声明式函数不一样,它将动态创建一个匿名函数;当其被调用后,该函数就将被自动删除。如果该函数在一个循环中使用,那么每次循环将创建一次函数,而声明式只会被创建一次。动态函数对于定义一个在运行时才能确定需求的函数而言是一个很好的方法。
例1:
var sayHi = new Function("toWhom","alert('Hi' + toWhom);");
sayHi("World!");
使用函数构造器创建一个匿名函数的语法格式:
var variable = new Function(“param1”,”param2”,........,”paramn”,”functionbody”);
例2:
function buildFunction(){
var func = prompt("Enter function body:");
var x = prompt("Enter value of x:");
var y = prompt("Enter value of y:");
var op = new Function("x","y",func);
var theAnswer = op(x,y);
alert("Function is: "+func);
alert("x is: "+ x + " y is: "+ y);
alert("The answer is: "+ theAnswer);
}
这个例子将匿名函数的动态性发挥到了极致。
浏览器显示:
函数字面量
也称为函数表达式,因为这样创建的函数将称为表达式的一部分,而不是一个特有类型的语句。
就是创建一个函数可以不使用函数构造器,同样也可以将其赋给一个变量;这样的字面量就构成了函数的字面量。
语法格式:
var func = function (params) {
statements;
}
它也没有函数名,和匿名函数的区别是,函数字面量只会被解析一次。
当想实现如把一个函数作为另一个函数的参数之类的扩展时,函数字面量的特色就会显示出来,看下面的例子。
例3:
function funcObject(x,y,z){
alert(z(x,y));
}
function testFunction(){
funcObject(3,4,function(x,y) {return x * y});//第三个参数是一个函数
}
执行结果是弹出一个显示“12”的alert对话框。