JS 函数定义:
1. function f(x){.....}
2. var a = function(x){....}
3. function(x){....}
三种定义方式的区别为: 第一种是最常用的定义方式,它的声明会自动提升到它定义范围的顶部,即可以在它的定义之前使用它。第二种定义方式只能是在它的声明之后使用,不能在声明之前使用它。第三种为匿名函数,它多用于作为函数参数或直接执行使用。
函数的调用可以分为四种:
1. 作为一个函数来调用。
2. 作为对象的方法来调用。
3. 作为构造函数来使用。
4. 用call()或apply()方法非直接调用方式来使用它们。
JavaScript函数参数: JavaScript并不对函数参数进行检查(包括参数个数与类型的检查),实参个数可以多于形参个数,也可以比形参个数少。它也就没有了像java里那样的函数重载。JavaScript函数有一个arguments的实参对象,它是一个像数组的对象,有一个length属性为实参实际的个数,可以用arguments[i]这样的形式来引用相应的实参。arguments还有一个callee的属性,它指代的是当前运行的函数。如:
var cx = (function(x){
if(x == 1) return 1;
else return x*arguments.callee(x-1);
}(5));
console.log(cx);
callee属性还有一个length属性,它代表的是形参个数。
当函数参数比较多的时候,可以使用一个对象来作为参数,这样做可以不必记住每个参数实际的位置甚至个数。
因为函数也是一种对象,所以可以为函数添加自定义的属性。
由于JavaScript里面函数作用域的特性,可以使用一个函数来作为命名空间,从而不使不需要出现在其它作用域的变量等污染其它作用域。
对于call()与apply()方法,它们俩的作用基本相同,只是call()方法第一个参数为调用函数的对象,其它参数为给函数的实际参数。而apply()方法第一个参数与call()方法相同,而第二个方法为一个数组,它包含了所有的实际参数。