JavaScript中Function类型

在JavaScript中用function关键字来定义一个函数,然而在JavaScript中,函数实际上是对象,每个函数都是Function类型的实例,函数仍然有属性和方法,函数名实际上是一个指向函数对象的指针。
一:在JavaScript中定义函数有3种方式:

function sum(num1,num2){
    return num1+num2;
}
var sum=funtion(num1,num2){
    return num1+num2;
};      //匿名函数的定义时要赋值给变量,最后要加上;
//第三种方式是使用Funtion的构造函数,这种方式不推荐使用
var sum=new Function("num1","num2","retrun num1+num2");

如果有如下代码:
function sum(num1,num2){
return num1+num2;
}
var anotherSum=sum;
因为使用不带圆括号的函数名是访问哈书指针并非调用函数,所以此时的anotherSum也是指向了同一个函数。
由于在JavaScript中的函数名是作为函数指针的作用的,所以ECMAScript中没有函数重载!

    //作为返回值的函数
    var box=function(sum,num){
        return sum(num);
    }
    function sum(num){
        return num+10;
    }
    var result=box(sum,10);
    alert(result);

二:函数的内部属性:在函数的内部,有两个特殊的对象,arguments和this。
1.arguments是一个类数组对象,包含传入函数中的所有参数,主要用于保存函数的参数,但是这个对象还有一个callee的属性,该属性是一个指针指向拥有这个arguments的对象的函数。
例如:
function box(num){
if(num<=1)
return 1;
else{
return num*arguments.callee(num-1);
}
}
alert(box(10));

2.this指代的是当前作用域下面的对象,当调用全局函数时,this就是window。
window是一个Object类型的对象,并且是JS里面最大的对象,最外围的对象
如果在代码中定义全局变量:var color=”红色的”;那么此时的color就是window对象的一个属性。

window.color="红色的";等价于:var color="红色的";

3.每一个函数对象,都有两个已经确定的属性:length返回函数参数的个数;prototype属性有两个方法:apply(),call();每一个函数都包含这两个非继承而来的函数:
apply():方法实现了调用已经定义的方法来执行

function box(num1,num2){
        return num1+num2;
    }
function sum(a,b){
        return box.apply(this,[a,b]);   //this表示的是window作用域,[]表示传递的参数(当然可以只传入arguments来传递参数)
    }
function sum(a,b){
        return box.call(this,a,b);  //this表示的是window作用域,
    }
    alert(sum(10,20));

总之:call()和apply()两个方法扩充了对象的作用域,降低了对象与方法之间的耦合程度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值