Function类型(2)

来源:互联网 发布:凡科建站 源码 下载 编辑:程序博客网 时间:2024/06/15 17:43

函数

作为值的函数

function calculate(func,arg1,arg2){        return func(arg1,arg2);    }    function add(num1,num2){        return  num1+num2;    }    var result=calculate(add,44,56);    alert(result);/100

在这个例子中,add函数作为calculate的参数被调用,这样也是可以的,要访问函数的指针而不是调用函数时,要去掉函数名后面的括号。

//作为sort的函数使用

function compare(propertyName){        return function (obj1,obj2){            var value1=obj1[propertyName];            var value2=obj2[propertyName];            if (value1>value2) {                return 1            }else if(value1<value2){                return -1            }else{                return 0            }        };    }    var data=[{name:"apple",color:"red"},{name:"banana",color:"yellow"}];    data.sort(compare(name));    alert(data[0].color);//red

函数的内部属性

函数内部都有两个特殊的对象,他们分别是arguments和this

arguments是一个类数组对象,包含着传入函数中的所有参数,他有一个名叫callee的属性,这个属性呢是一个指针,指向拥有这个arguments对象的函数。

用他我们可以来写一个非常经典的阶乘函数

//不运用argumentsfunction factorial(num){        if (num<=1) {            return 1        }else{            return num*factorial(num-1)        }    }//运用argumentfunction factorial(num){    if(num<=1){        return 1;    }else{        return num*arguments.callee(num-1)}

在这个运用argumnts的函数中,没有引用函数名,使得无论函数使用什么名字,都能保证递归的完成

*callee还有一个大兄弟叫caller,他这个大兄弟的保存着调用当前函数的函数的引用,
比如下面这个例子,outer()中调用了inner(),在inner中利用arguments.callee.caller返回了outer()函数。

function outer(){        inner();    }    function inner(){        alert(inner.caller);    }    outer();

另一个特殊对象是this,this引用的是函数据以执行的环境对象。不同的环境下,this的指向不同,如下例

    window.color="red";    var exp={color:"blue"};    function sayColor(){        alert(this.color);    }    sayColor();//red    exp.sayColor=sayColor;    exp.sayColor();//blue    sayColor();//red