一、函数内部两个特殊的对象: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下
耦合:互相关联