函数
JavaScript是一种基于对象的脚本语言,JavaScript 代码复用的单位是函数,但它的函数比结构化程序设计语言的函数功能更丰富。函数在JavaScript中非常强大,它可以独立存在,而且JavaScript 的函数可以作为一个类使用,是定义类的唯一途径(即函数与类定义方法基本相同,只是起名时习惯把函数定义成全小写,把类定义成首字母大写),与此同时,函数本身也是一个对象, 函数本身是Function实例。
函数的定义
JavaScript是弱类型语言,在定义是不需要声明返回值类型,不用声明参数的类型。函数的最大作用是提供代码的复用,将需要重复使用的代码块定义成函数,便可以最大程度减轻代码量。
定义函数有三种方法
- 定义命名函数
function funct ionName (parameter-list)
{
...
}
//例
hello('china') ;
//定义函数hello,该函数需要一个参数
function hello (name){
alert(name + ", 你好");
}
#注 函数可以有返回值,也可以没有返回值,函数的返回值使用return语句返回,在函数的运行过程中,只要遇到return,函数就结束并且返回。
- 定义匿名函数
<script type="text/javascript">
var f = function (name){
document.writeln('匿名函数<br/>');
document.writeln('你好' + name) ;
};
f('china') ;
</script>
这种定义方法在JavaScript中非常常见,不用给函数具体的明,而是将函数定义赋值给一个变量,这样调用该变量即可调用该函数
- 使用Function类匿名函数
JavaScript提供了一个Function 类,该类也可以用于定义函数,Function 类的构造器的参数个数可以不受限制,Function 可以接受一系列的字符串参数, 其中最后-一个字符串参数是函数的执行体,执行体的各语句以分号( ; ) 隔开,而前面的各字符串参数则是函数的参数。
//定义匿名函数,并将函数赋给变量f
var f = new Function ('name',"document.writeln('Function定义的函数<br>');"+"document.writeln('你好'+ name) ;") ;
//通过变量调用匿名函数
f('china');
上面代码使用new Function()语法定义了一个匿名函数,并将该匿名函数赋给f变量,从而允许通过f来访问匿名函数。可以注意到在用这种方式时,Function()构造器的最后一个参数包含了函数的作用,当这个函数作用变得复杂时,这个参数将变得十分臃肿,可读性也会变差,尽量不要使用
函数的递归调用
函数不仅仅可以被变量调用,还可以被自己本身调用,在一些特殊情况下,这种我调我自己的方式可以减少很多运算,如计算阶乘
<script type="text/javascript">
//定义求阶乘的函数
var factorial = function(n){
//只有n的类型是数值,才执行函数
if (typeof(n) == "number"){
//当n等于1时,直接返回1
if(n==1){
return 1;
}
//当n不等于1时,通过递归返回值
else{
return n*factorial(n - 1) ;
}
//当参数不是数值时,直接返回
}
else{
alert("参数类型不对! ");
}
//调用阶乘函数
}
alert(factorial(5)) ;
</script>
运用递归函数时,一定是大问题比较复杂,而小问题类型和大问题相同的情况,并且一定要向一指的方向递归,在上面问题中,5!,10!,n!可能比较难求解,但是1!的值却是确定的,所以要将大问题化小,化到问题为求1!时,问题才能被解决
局部函数
局部函数的概念与局部变量类似,局部变量在函数里用var关键字定义,而局部函数也在函数里定义。函数中定义的函数就叫局部函数
<script type="text/javascript">
//定义全局函数
function a (){
//定义第一个局部函数
function b(){
document.write("局部函数1 <br>");
}
//定义第二个局部函数
function c(){
document