zoukankan      html  css  js  c++  java
  • 函数深入理解---函数的内部属性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的方法,arguments.callee(arg)
        可以反向的调用
    */
    
    //say(1,2,3);
    
    //此时和函数名耦合在一起
    //return num * factorial(num-1);
    //以下就实现了函数名的解耦合,在js中通常都是使用这种方式做递归
    function factorial(num){
        if(num<=1){
            return 1;
        }else{
            return num*arguments.callee(num-1);
        }
    }
    
    /*
        以上是一个求阶乘的函数,以上递归调用的函数名称和原有函数名耦合在一起了
        如果将来这个函数名称更改之后递归调用就会失效
    */
    var cf = factorial;
    //此时不会报错
    console.log(cf(5));
    factorial = null;
    
    //此时由于cf这个函数依然使用factorial这个名称来调用,但是factorial已经指向null了,所以就会报错
    //递归调用就会失效
    
    console.log(cf(5));
    
    
    this

    /* 当需要创建一个类的时候,设置类的属性和方法需要通过this关键字来引用 但是特别注意:this关键字在调用时会根据不同的调和对象变得不同 */ var color = 'red'; function showColor(){ console.log(this.color); } //创建了一个类,有一个color的属性和一个show的方法 function Circle(color){ this.color = color; this.showColor = showColor; } var c = new Circle('yellow'); //使用c来调用showColor 方法,等于调用了showColor()方法 //此时的this是c,所以color就是yellow c.showColor();//yellow //此时调用的对象等于是window,showColor的this就是window,所以就会找window中color showColor(); //red
  • 相关阅读:
    Jquery小技巧
    搭建Eclipse+MyEclipse+Tomcat开发环境
    ASP.NET:就是喜欢Web Form,就是喜欢拖控件(二)
    ASP.NET:就是喜欢Web Form,就是喜欢拖控件(一)
    程序员能力矩阵 你属于哪一层?
    WEB
    ASP.NET:就是喜欢Web Form,就是喜欢拖控件(四)
    ASP.NET:就是喜欢Web Form,就是喜欢拖控件(五)
    jQuery:简单6行代码实现tab效果
    iPhone程序开发新人FAQ
  • 原文地址:https://www.cnblogs.com/leole/p/4160253.html
Copyright © 2011-2022 走看看