Javascript学习篇:引用类型——Function类型(3)

 -        函数内部属性

在函数的内部,有两个特殊的对象:arguments和this。

arguments:它是一个类数组对象,包含着传入函数中的所有参数。主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。

function factorial(num){

if (num<=1){

return 1;

}else{

return num*factorial(num-1);

}

上面代码中,在函数有名字,而且名字以后也不会变的情况下,这样定义没有问题。但问题是这个执行函数与函数名factorial紧紧耦合在了一起,为了消除这种情况,可以修改成这样。

function   factorial (num){

if  (num<=1){

return;

} else{

return  num*arguments.callee(num-1);

}

}

var  trueFactorial =  factorial;

factorial  =  function (){

return 0 ;

};

alert (trueFactorial(5));   // 120

alert(factorial(5));   //0

如果像原来的factorial()那样不使用arguments.callee,调用tureFactorial()就会返回0,可以,在解除了函数体内的代码与函数名的耦合状态,trueFactorial()仍能正常地计算阶乘。

 函数内部的另一个特殊对象是this。

this:引用的是函数执行的环境对象——或者说是this值(当在网页的全局作用域中调用函数时,this对象引用的就是windows)。

window.color = "red";

var  o = {color:"blue"};

function  saycolor(){

alert (this.color);

}

saycolor();       // red

o.saycolor = saycolor;

o.saycolor();    // blue

函数的名字仅仅是一个包含指针的变量而已。因此,即使是在不同的环境中执行,全局的saycolor()函数与o.saycolor()指向的仍然是同一个函数。

陈健的个人博客,记录生活所见所感、学习笔记。专注于Web前端_SEO教程_读书心得。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回主页看更多
狠狠的抽打博主 支付宝 扫一扫