函数内部有两个对象:argument this .
argument是一个数组类型对象,包含着传入函数中的所有参数.还有一个名叫callee的属性,该属性是一个指针,指向拥有argument对象的函数.
阶乘函数
function factorial(num){
if(num<1){
return 1;
}else{
return num * factorial(num-1);
}
}
该函数问题:函数名称改了后就会出错,因为这个函数的执行与函数名紧紧耦合在一起
function factorial(num){
if(num<1){
return 1;
}else{
return num *argumnet.callee(num-1);
}
}
var Truefactorial = factorial;
factorial = function(){
return 0;
}
alert(Turefactorial(5)) //120
alert(factorial(5)) //0
this:
window.color = "red";
var o = {color:"blue"};
function sayColor(){
alert(this.color);
}
sayColor(); //red
o.sayColor = sayColor;
o.sayColor(); //blue
函数名字仅仅是一个包含指针的变量,即使在不同环境中执行,全局的sayColor()函数与o.sayColor()指向的仍然是同一个函数.