(六)函数
- 函数的指针调用方式
通过指针来调用函数,毁掉函数按照调用者的约定实现函数的功能,由调用者调用。通常使用在自定义功能而由第三方去实现的场合。
- 函数的参数
函数的参数是函数与外界交换数据的接口。
JS的函数参数信息由arguments对象管理。
arguments对象代表正在执行的函数和调用它的参数。函数对象的length属性说明函数定义时指定的参数个数(形参),arguments对象的length属性说明调用函数时实际传递的参数个数(实参)。arguments对象不能显式创建,函数在被调用时由JS运行时环境创建并设定各个属性值,其中包括各个参数的值。通常使用arguments对象来验证所传递的参数是否符合函数要求。
- 函数返回类型
返回类型分两种类型,即值类型和引用类型。值传递使用的是值传递方式,即传递数据的副本;而引用类型则是引用传递方式,即传递数据的地址。
一般,函数返回的非对象数据都使用值返回方式。数据量比较小的时候使用值传递,数据量比较大时使用引用传递。
function get(){ var List = new Array("Lily","Petter"); return List; } var nals=get(); alert(nals); nals=null; alert(nals);
function get(){ function sum(a,b){ return a+b; } return sum; } var sumoftwo=get(); var total=sumoftwo(1,2); alert(sumoftwo); alert(total);
第一段代码中nals获取数组List的一个引用,最后等于null断开变量nals对数组对象的引用,这一操作将删除数组对象。
第二段代码中sumoftwo是这个东西
function sum(a,b){ return a+b; } return sum;
也就是说他是一个函数。然后调用
- 函数的分类
分为构造函数,有返回值函数和无返回值函数。构造函数与一个特定的对象联系起来。
JS是基于对象的语言而不是真正面向对象的语言。没有类的概念,完成一个类的定义只需要一个构造函数即可。
function Employee(name,sex,adr){ this.name=name; this.sex=sex; this.adr=adr; this.getName=getName;//方法:取得雇员姓名 } function getName(){ return this.name; } var e = new Employee("sunsir","男","贵州贵阳"); var n=e.getName(); alert(n);
有返回值的函数
function mul(arg1,arg2){ return arg1*arg2; }
- 函数的作用域
每一个函数在执行时都处于一个特定的运行上下文中,该上下文决定了函数可以直接访问到的变量,那些变量所处的范围称为该函数的作用域。
公有函数和私有函数。
一般定义的都为公有函数。当函数嵌套定义时,子级函数就是父级函数私有函数,外界不能调用私有函数。
- this关键字
this关键字引用运行上下文中的当前对象,JS的函数调用通常发生于某一个对象的上下文中。如果尚未指定当前对象,则调用函数的默认当前对象时Global,使用call方法可以改变当前对象为指定的对象。
var chair="公园的椅子";//公物,谁都可以用 function TomHome(){ this.chair="汤姆家的椅子";//汤姆家的椅子 } function useChair(){ alert(this.chair);//输出当前椅子的信息 } var th=new TomHome();//定义一个新家 useChair();//当前的场景是公园,其属于Global对象的属性 useChair.call(th);//指定当前场景为新家,汤姆家,于是this就是指新生成的汤姆家