it之路。

javascript 学习之函数-定义和调用函数

定义函数最简单的方式就是用javascript语句。这种声明由一个function关键字后面接下面这三部份组成:

1,函数名;

2,0个或多个括号内的参数,由逗号隔开;

3,由javascript语句组成的方法体。

下面有一些函数的定义,虽然简单,但是包含了上面列的所有内容。注意函数可能接收几个参数,也可能包含或者不包含return语句。如果函数的return后面没有表达式,那么将返回undefined值,如果函数没有return语句,那么他将在执行每一条语句后退出函数并返回undefined值。

// 一个快捷函数,有时候比document.write有用

// 这个函数没有return语句,所以他返回undefined.

function print(msg){

document.write(msg,"<br>");

}

// 计算并返回两点之间距离的函数

function distance(x1,y1,x2,y2){

var dx=x2-x1;

var dy=y2-y1;

return Math.sqrt(dx*dx+dy*dy);

}

// 一个递归函数,求阶乘

function factorial(x)

{

if(x<1)

{

return 1;
}

return x*factorial(x-1);

}

一旦一个函数被定义,就可以通过()的形式来调用他。通过在圆括号内加上一些可选的用逗号隔开的参数就可以实现函数调用。如上面定义的函数就要吧像这样被调用:

print("hello,"+name);

print("welcome to my blog!");

total_dist=distance(0,0,1,2)+distance(2,1,3,4);

print("the probability that is:"+factorial(5)/factorial(13));

当你调用一个函数的时候,你在圆括号内指定的每个表达式都会被计算,计算的结果将被作为这个函数的参数传入函数内部。注意,这些参数只在函数体内发挥作用,在函数体外或者在函数体内的return语句之后都无效。

因为javascript是弱类型的语言,所以你不必指定传个一函数的参数类型,而javascript也不会去检查你是否传入了一个函数所期望的数据类型。如果传入的参数类型非常重要的话,你可以用typeof操作符来检查。javascript也不会检查你传入的参数个数是否正确,如果你传入了过多的参数,那么多余的参数将被忽略。如果传入的参数个数不够,那么那些没有被传入的参数将被作为undefined值来处理。一些函数被设计为可以忽略参数,而有些则不行。

注意,上面写的print函数没有return语句,所以它总是返回undefined值,并且不能作为一个大的表达式的一部份。

嵌套函数

在javascript中,一个函数可以嵌套在另一个函数里面。如:

function hypetenuse(a,b)

{

function square(x){return x*x;}

return Math.sqrt(square(a)+square(b));

}

嵌套函数的定义只能出现在外层函数的最上层,就像if语句和for循环一样。注意,这种限制仅限于function statement,而下面将要讲的function literal可以出现在任何地方。

Function Literals

javascript允许用function literals来定义函数,function literals就是一个定义了一个未命名的函数的表达式。规则很像function statement,除了他被作为一个表达式并且不需要函数名。

下面的两行代码用这两种方式定义了同样的函数:

function f(x){return x*x;}// function statement

var f=function(x){return x*x;}// function literal

虽然function literal创建不需要名字的函数,但是在递归的时候指定函数名还是比较有用的,如:

var f=function fact(x){if(x<1){return 1;} else return x* fact(x-1);}

这行代码定义了一个未命名的函数并把它的引用存储在变量f中.他并没有存储引用到变量fact中,便允许在函数体内用它来引用函数本身。注意,这种function literal在javascript1.5以前是无效的。

因为function literal这种方式通过javascript表达式创建函数,他们更加灵活并且更适合那种只使用一次没有必要命名的函数。例如,function literal定义的函数可以被存储到一个变量中,作为参数传递给另一个函数,或者直接调用:

f[0]=function(x){return x*x;}// 存储到变量中

a.sort(function(a,b){return a-b;});// 作为参数传递

var tensquraed=(function(x){return x*x;})(10);// 定义然后直接调用

函数命名

任何合法的javascript标识符都可以作为函数名。尽量选用那些简单并且描述性的函数名。好的函数名可以大大的增加你的代码的可读性。

函数名通常以动词或者短语开头。一个公共的约定就是函数名通常以小写字母开头。当一个函数名包括多个单词时,一种约定是用下划线分隔开,另一种约定是首单词外的其它单词都以大写字母开头。还有一些内部的或者隐藏的函数通常以下划线(underscore)开头。

在一些程序或者好的框架中,给一些常用的函数起一些短的名字是非常有用的,例如客户端的javascript框架Prototype,它用一个$()来替代常用但是难写的document.getElementById()。(注意,美元符号$和下划线_是在javascript中除了字母和数字外唯一合法的特殊符号。)

posted @ 2009-04-01 17:38  3912.77  阅读(3284)  评论(1编辑  收藏  举报