2018-10-25 Function类型(p110-p115)

2018-10-25  本文已影响0人  走花鹿
          1.函数声明语法:
        例:function sum (num1,num2){
                return num1 + num2;
        }
        
    2.函数表达式定义:
        var sum = function(num1,num2){
            return num1 + num2;
        }
        
    3.Function构造函数
        var sum = new Function("num1","num2","return num1 + num2");不推荐!!!
        
        
5.5.1 没有重载,会被后面的同名函数覆盖

    
5.5.2 函数声明与函数表达式 
            解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);
            至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被执行。
            
            例:
                alert(sum(10,10))
                function sum (num1,num2){
                    return num1 + num2;
                }
            
            解析器有函数声明提升的过程。
            
5.5.3 作为值的函数
            例:
                function add10(num){
                    return num + 10;
                }
                
                var result1 = callSonmeFunction(add10,10);
                alert(result1);//20
        
        要访问函数的指针而不执行函数的话,必须去掉函数名后面的那对圆括号。
        
        
        可以从一个函数中返回了一个函数
            例:function createComparisonFunction(propertyName){
                return function(object1,object2){
                    var value1 = object[propertyName];
                    var value2 = object[propertyName];
                    
                    if(value1<value2){
                        return -1;
                    }else if(value1>value2){
                        return 1;
                    }else{
                        return 0;
                    }
                };
            }
            
            
            var data = [{name:"Zachary",age:28},{name:"Nicholas",age:29}];
            
            data.sort(createComparisonFunction("name"));
            alert(data[0].name);//Nicholas
            
            data.sort(createComparisonFunction("age"));
            alert(data[0].name);//Zachary
            
            
5.5.4  函数内部属性
            在函数内部,有两个特殊的对象:arguments和this。
            arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有
            这个arguments对象的函数
            
            例:阶乘函数
                function factorial(num){
                    if(num<=1){
                        return 1;
                    }else{
                        return num *factorial(num-1);
                    }
                }
            问题在于这个函数的执行与函数名factorial紧紧
耦合在了一起。为了消除耦合,可以使用arguments.callee.
            
                例:
                    function factorial(num){
                        if(num<=1){
                            return 1;
                        }else{
                            return num*argument.callee(num-1);
                        }
                    }
                    
 在这个重写后的factorial()函数的函数体内,
  没有在引用函数名factorial。这样,无论引用函数时是用什么名字都可以保证完成递归调用.
            
                var trueFactorial = factorial;
                factorial = function(num){
                    return 1;
                };
                alert(factorial(5));//1
                alert(trueFactorial(5));//120
上一篇 下一篇

猜你喜欢

热点阅读