一、函数内部两个特殊的对象:1 arguments(数组对象) 2 this
function sum(num){     //阶乘,递归  
	return num*sum(num-1);
}
sum(4);--24
function sum(num){
	return num*arguments.callee(num-1);
}
sum(4)--24
arguments.callee();调用自身,实现函数递归
callee是arguments对象的属性,指向拥有这个arguments这个对象的函数。
二、window是个对象,是js里面最大的对象,是最外围的对象,表示全局。
var color="红色的";==window.color="红色的";==this.color="红色的";
1全局的变量是window对象下的属性
2在全局作用域中,this指的就是window对象。
var box={
	color:"蓝色的",      //这里的color是box下的属性,是局部变量box.color="蓝色的";
	sayColor:function(){
		alert(this.color);  //这里的this指的box这个对象
	}
}
三、函数是对象,所以也有自己的属性和方法,每个函数都包含的两个属性:length和prototype
1 length:函数的参数个数
function box(name,age){
	return name+age;
}
alert(box.length);---2  即这个函数有两个参数
2 prototype下的两个方法:apply和call,使用它们,可以冒充另外一个函数去执行。
function box(num1,num2){
	return num1+num2;
};
alert(box(10,10));  ----20
function sum(num1,num2){
	return box.apply(this,[num1,num2]);
//this指的是window对象,因为box是在window作用域下的;[]数组里面是传递的参数,或者使用arguments代替[num1,num2]。
}
alert(sum(10,10));----20
function sum(num1,num2){
	return box.call(this,num1,num2)  
//call和apply的区别仅仅是传递参数不同,apply是数组形式,call是一个参数一个参数的传。
}
用场:
var color="红色的";     //全局的 
var box={
	color:“蓝色的”  //局部的
}
function sayHello(){
	alert(this.color);
}
alert(sayHello());---红色的 ,因为sayHello函数是在window全局作用域下,所以,this指的也是window。
如果使用call可以实现对象的冒充:
sayHello.call(window)==sayHello.call(this)----红色的  作用域在window下
sayHello.call(box)  )----蓝色的                        作用域在box下          
耦合:互相关联
 
原文:http://www.cnblogs.com/annie211/p/6051882.html