Function类型(2)

函数

作为值的函数

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对象的函数。

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

//不运用arguments
function factorial(num){
        if (num<=1) {
            return 1
        }else{
            return num*factorial(num-1)
        }
    }
//运用argument
function 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值