函数内部属性:arguments和 this

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

1 function box(num){
2     if(num <=1 ){
3         return 1;
4     }else{
5         return num*box(num-1); //一个简单的递归
6     }
7 }
8 alert(box(4));

对于阶乘函数一般要用到递归算法, 所以函数内部一定会调用自身; 如果函数名不改变是没有问题的,但一旦改变函数名,内部的自身调用需要逐一修改。为了解决这个问题,我们可以使用 arguments.callee来代替 。

    function sum(num){
        if(num <=1){
            return 1;
        }else{
            return num*arguments.callee(num-1);//使用arguments.callee函数,调用自身,实现递归
        }
    }
    alert(box(4));    

函数内部另一个特殊对象是 this,其行为与 Java和 C#中的 this大致相似。换句话说,this引用的是函数据以执行操作的对象, 或者说函数调用语句所处的那个作用域。

PS: 当在全局作用域中调用函数时, this对象引用的就是 window 。

// window是一个对象,而且是JS里面最大的对象,是最外围的对象
    alert(typeof window);//window是对象,类型是object;
    alert(typeof this);//和window是一样的,所以this就是window;
    alert(window);//输出[object Window]
    alert(this);//输出[object Window] this目前表示的是window,因为在window的范围内
var color="red";//这里color就是全局变量,而这个变量又是window的属性
    alert(window.color);//这里已经很好说明color是window下的属性
    alert(this.color);//同上
    alert(color);//同上
var box={
        color:‘green‘,
        sayColor:function(){
            return this.color; //等价于box.color
        }
    }
    alert(box.sayColor());//局部打印box对象的颜色
window.color="红色的";
    function sayColor(){
        alert(this.color);//所以这里执行是动态的,第一次是在window下的,第二次是在box下的
    }
    sayColor();//输出为‘红色的‘;其实范围是在window下的
    var box={
        color:"绿色的" //创建一个对象
    }
    box.sayColor=sayColor;//追加一个对象属性,并把sayColor函数赋给对象box.sayColor;
    box.sayColor();//输出为‘绿色的‘,此时是在box的范围下的
时间: 2024-10-07 09:17:42

函数内部属性:arguments和 this的相关文章

2、函数内部属性 arguments是类数组对象,主要用途是保存函数参数,但这个对象中有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数

例如:(1).function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } }//此时是递归算法 var trueFactorial=factorial;//将factorial复制给trueFactorial factorial=function(){ return 0; }//覆盖factorial函数 alert(trueFactorial(5));//0;因为辞职factorial

js函数的内部属性---arguments,callee,caller

在接下来的几篇文章中,我大家谈谈函数的内部属性,arguments,callee,caller (1)arguments,是一个类数组对象,其中包含了传入函数的所有参数,主要用途是,保存函数的参数: 代码1: function aa(b){alert(arguments);} aa(4); function aa(a,b,c,d){alert(arguments.length);} aa(1,2,3,4); function aa(a,b,c,d){alert(arguments[2]);} a

Javascript高级程序设计——函数内部属性与函数属性

函数内部属性 函数内部有两个特殊的属性arguments和this.其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针,指向拥有arguments的函数.而this据以引用的是函数执行环境对象. function fib(n){ if(n = 1){ return 1; }else{ return n * arguments.callee(n - 1); } } //这里利用函数内arguments的callees属

JavaScript函数内部属性和函数方法

函数是对象,有自己的属性和方法 .首先通过console下输出的函数属性方法来直观的看一下: 函数内部属性只要包括两个特殊的对象:arguments和this. 函数属性包括:length和prototype 函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind().toString().toLocaleString().valueOf() 其他的目前不熟,后面再补充 1. 函数内部属性 在函数内部,有两个特殊的对象,arguments和this. argument

js 方法中内部属性arguments的callee属性

var factorial=function(num){ if(num<=1) return 1; else // return num*factorial(num-1);//递归时,在方法内部通过该方法的方法名来调用自己是非常危险的,因为js可以直接修改方法变脸的值 return num*arguments.callee(num-1);//递归时,应该使用方法内部属性arguments的callee属性,它保存了当前方法的地址(指针) } var another=factorial; fact

函数内部属性之arguments和this

在函数内部,有两个特殊的对象:arguments和this. 1.arguments arguments是一个类数组对象.包含着传入函数中的所有参数.但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数. 经典案例:阶乘函数 function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num-1); } } 定义阶乘函数一般都要用到递归算法,如上所示,

javascript——函数内部属性

1 <script type="text/javascript"> 2 //在函数内部有两个特殊的属性:arguments 和 this.arguments是一个类数组对象,包含传入的所有参数, 3 //但是这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数. 4 //请看经典的阶乘函数例子: 5 function Factorial(num) { 6 if (num <= 1) { 7 return 1; 8 } el

函数深入理解---函数的内部属性arguments和this

arguments function say(num){ /* 在函数对象中有一个属性叫做arguments,通过这个属性可以获取相应的参数值,这个属性 是一个数组,其实就是传递进来的参数 */ console.log(arguments.length); for(var i=0;i<arguments.length;i++){ console.log(arguments[i]); } console.log(num); } /* 在arguments这个对象中有一个callee的方法,argu

JS学习之函数内部属性和方法

知识点:arguments和this对象.caller属性.apply()和call()方法     arguments对象:函数内部对象,传入函数中所有参数的集合,类数组对象 属性:callee 指针,指向拥有这个arguments对象的函数  作用:解耦 例子:迭代 function factorial(num) { if(num<=1){ return 1; }else{ return ( num*arguments.callee(num-1)); } } console.log(fact