首先从语法的角度来讨论函数,介绍函数的定义和调用,并将它与C#的函数进行比较。
函数的定义最常用的方法就是调用function语句,该语句是由关键字function构成的,它后面跟随的是:
1. 函数名。
2. 一个用括号括起来的的参数列表,这个列表是可选的,其中的参数用逗号分隔开。
3. 构成函数主体的JavaScript语句包含在大括号内。
除了用function语句定义函数以外还可以使用function()构造函数和函数直接量来定义函数。下面分别给
出了3个样例:
a) function f(x,y) {return x*y;} //function语句
b) var f=new function('x','y','return x*y'); //function构造函数
c) var f=function(x,y){return x*y;}; //函数直接量
虽然JavaScript提供了多种形式的函数定义方式,但个人觉得为了保持编程习惯上的一致性,最好使用
function语句的方式来定义函数,这样可以与高级语言保持一致,也便于阅读和理解。
如果函数已经被定义了,那么可以使用运算符()来调用它。可以把函数看成一个对象,这个对象在函数
执行的时候被创建(JavaScript中的术语称为'调用对象'),函数中定义的变量看作函数的属性,同时这个对象
还预定义了一个特殊属性--arguments,这个属性代表了对象Arguments,是函数的实际参数(在下面会详细
阐述这个属性的作用)。
JavaScript函数的特点:
1. 因为JavaScript语言是一种无类型语言,所以不能给函数的参数指定一个参数类型,同样JavaScript
也不会检测传递的数据是不是函数所要求的类型。
2. JavaScript也不会检测传递给它的参数个数是否正确。如果传递的参数比需要的个数多,那么多余
的值会被忽略掉。如果传递的参数比函数需要的个数少,那么多余的几个参数就会被赋予undefined
。
3. JavaScript函数中如果不包含return语句,那么它返回的总是undefined。
4. 由function语句声明的函数可以定义在顶层全局代码中,也可以定义在顶层函数代码中。
(PS:不同的JavaScript实现关于函数定义的要求比标准要求的会松一些。但书写JavaScript时应尽量根据
标准的规则来。)
5. 在JavaScript中,函数不只是一种语法,还可以是数据(即对象),这意味着能够把函数赋值给变量,存储
在对象的属性中或存储在数组元素中,传递给函数,等等。而在类似C#的高级语言中,函数是程序的
一部分,它只能由程序调用而不能由程序操作(赋值等)。 这个特性是JavaScript函数与高级语言最大的
区别,要牢记!!!
Arguments对象
函数中预定义的属性arguments,它用来引用Arguments对象。在上面的JavaScript函数特点中提
到过定义JavaScript函数时有固定数目的参数,但实际调用的时候可以传递任意个参数,并不需要
按参数定义的规格来传递(这点和C#有很大的不同),而Arguments对象可以完全存储那些实际参数
值。例如,假设你定义了一个函数f(),调用的时候为f(x,y,z),那么,你可以通过arguments[0]来获取
参数x的值,arguments[1]来获取参数y的值,arguments[2]来获取参数z的值。Arguments对象具有属性
length,用于说明它所含有的元素个数。Arguments对象还具有属性callee,用来引用当前正在执行
的函数。
函数的属性和方法
属性Length
只读属性,返回的是函数声明中的形式参数个数。
自定义属性
定义你自己的函数属性。例如:
<script language='JavaScript'>
uniqueInteger.counter=0;
function uniqueInteger()
{
return uniqueInteger.counter++;
}
</script>
函数的定义最常用的方法就是调用function语句,该语句是由关键字function构成的,它后面跟随的是:
1. 函数名。
2. 一个用括号括起来的的参数列表,这个列表是可选的,其中的参数用逗号分隔开。
3. 构成函数主体的JavaScript语句包含在大括号内。
除了用function语句定义函数以外还可以使用function()构造函数和函数直接量来定义函数。下面分别给
出了3个样例:
a) function f(x,y) {return x*y;} //function语句
b) var f=new function('x','y','return x*y'); //function构造函数
c) var f=function(x,y){return x*y;}; //函数直接量
虽然JavaScript提供了多种形式的函数定义方式,但个人觉得为了保持编程习惯上的一致性,最好使用
function语句的方式来定义函数,这样可以与高级语言保持一致,也便于阅读和理解。
如果函数已经被定义了,那么可以使用运算符()来调用它。可以把函数看成一个对象,这个对象在函数
执行的时候被创建(JavaScript中的术语称为'调用对象'),函数中定义的变量看作函数的属性,同时这个对象
还预定义了一个特殊属性--arguments,这个属性代表了对象Arguments,是函数的实际参数(在下面会详细
阐述这个属性的作用)。
JavaScript函数的特点:
1. 因为JavaScript语言是一种无类型语言,所以不能给函数的参数指定一个参数类型,同样JavaScript
也不会检测传递的数据是不是函数所要求的类型。
2. JavaScript也不会检测传递给它的参数个数是否正确。如果传递的参数比需要的个数多,那么多余
的值会被忽略掉。如果传递的参数比函数需要的个数少,那么多余的几个参数就会被赋予undefined
。
3. JavaScript函数中如果不包含return语句,那么它返回的总是undefined。
4. 由function语句声明的函数可以定义在顶层全局代码中,也可以定义在顶层函数代码中。
(PS:不同的JavaScript实现关于函数定义的要求比标准要求的会松一些。但书写JavaScript时应尽量根据
标准的规则来。)
5. 在JavaScript中,函数不只是一种语法,还可以是数据(即对象),这意味着能够把函数赋值给变量,存储
在对象的属性中或存储在数组元素中,传递给函数,等等。而在类似C#的高级语言中,函数是程序的
一部分,它只能由程序调用而不能由程序操作(赋值等)。 这个特性是JavaScript函数与高级语言最大的
区别,要牢记!!!
Arguments对象
函数中预定义的属性arguments,它用来引用Arguments对象。在上面的JavaScript函数特点中提
到过定义JavaScript函数时有固定数目的参数,但实际调用的时候可以传递任意个参数,并不需要
按参数定义的规格来传递(这点和C#有很大的不同),而Arguments对象可以完全存储那些实际参数
值。例如,假设你定义了一个函数f(),调用的时候为f(x,y,z),那么,你可以通过arguments[0]来获取
参数x的值,arguments[1]来获取参数y的值,arguments[2]来获取参数z的值。Arguments对象具有属性
length,用于说明它所含有的元素个数。Arguments对象还具有属性callee,用来引用当前正在执行
的函数。
函数的属性和方法
属性Length
只读属性,返回的是函数声明中的形式参数个数。
自定义属性
定义你自己的函数属性。例如:
<script language='JavaScript'>
uniqueInteger.counter=0;
function uniqueInteger()
{
return uniqueInteger.counter++;
}
</script>

浙公网安备 33010602011771号