• js08--函数1


    函数当成类看当成匿名对象看,都是跟java吻合的,只有当成函数看(函数自己可以执行)跟java区别在这里。
    
    
    function fact(){}
    var F = fact ;
    函数名是函数对象的地址,是地址就有内存区域,执行就是地址名()小括号,var f = new F(),f就不是指向函数F的地址了,他是F类的对象,他的地址里面是对象,不仅仅是一个函数。
    
    function fact(num){
        if(num <=1) return 1 ;
        else  return num*fact(num-1),  //fact只是一个变量名存的是函数地址,
    }        
    alert(fact(5));    
    var F = fact ;
    fact = null;//进一步证明了fact只是一个变量名存的是函数地址,
    alert(F(5));    //报错,fact不是一个函数

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Untitled Document</title>
            <script type=text/javascript charset=utf-8>
            //形参无类型
            function  test(a ,b){
                alert(a+b);
                alert(111);
                return a+b;
            }
            var c = test(10 , 20);
            //函数当成类看当成匿名对象看,都是跟java吻合的,只有当成函数看(函数自己可以执行)跟java区别在这里。
            
            alert(c);
            alert(typeof test);        //函数也是一种数据类型 (function类型)
            
            function test1(aa){
                aa();
            }
            function test2(){
                alert('执行啦');
            }
            test1(function(){ alert('我也执行啦!')});
            
            // 在js中函数是可以嵌套定义的 (尽量不要这样去定义)
            function test3(){
                function test4(){
                    alert('我是test4!');
                }
                test4();//函数调用
            }
            test3();//函数调用
            </script>
        </head>
        <body>
        </body>
    </html>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Untitled Document</title>
            <script type=text/javascript charset=utf-8>
                // 3种方式定义函数 
                // 1 function语句式
                function test1(){
                    alert('我是test1');
                }
                test1();
                
                // 2函数的直接量 ECMAScript
                var test2 = function(){
                    alert('我是test2');
                }
                test2();
                
                // 3function构造函数式
                var test3 = new Function("a" , "b" ,"return a+b;");//函数参数,函数体
                alert(test3(10,20));//30
                
                
                //效率对比
                var d1 = new Date();
                var t1 = d1.getTime();
                for(var i =0 ; i <100000;i++){
                    function test1(){;}        //function语句的形式,最开始函数解析一次放在内存中,多次调用用同一个,
                    var test2 = new Function();//函数调用一次就解析一次,执行完就销毁了,多次调用多次解析,
                }
                var d2 = new Date();
                var t2 = d2.getTime();
                alert(t2 -t1);             
                
                test1();//可以运行
                function test1(){
                    alert('1111');
                }
                alert(test2); //undefined
                test2();//test2 is not a function 
                var test2 = function(){
                    alert('2222');
                }
                
                /* 4 2 3 3 5 6
                { 
                    var f : 未定义
                    f : function f(){return 4;}     
                }
                {
                    var f : new Function("return 2;"); ---> function(){return 3;} ---> 
                            new Function("return 5");  ---> function(){return 6 ;}
                }
                */
                function f(){return 1;}                  
                alert(f());        //返回值为4  
                var f = new Function("return 2;"); 
                alert(f());        //返回值为2 
                var f = function(){return 3;}             
                alert(f());           //返回值为3  
                function f(){return 4;}              
                alert(f());        //返回值为3  
                var f = new Function("return 5");  
                alert(f());    //返回值为5  
                var f = function(){return 6 ;}         
                alert(f());        //返回值为6      
                
                
                
                //函数作用域的概念
                var k = 1 ; 
                function t1(){
                    var k = 2 ; //局部变量 k
                    function test(){return k ;}     //function语句,k = 2
                    var test = function(){ return k};    //函数直接量,k = 2
                    var test = new Function('return k;');    // 构造函数的方式,k = 1
                    alert(test());
                }
                t1();            
            </script>
        </head>
        <body>
        </body>
    </html>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Untitled Document</title>
            <script type=text/javascript charset=utf-8>
            //js中 函数的参数: 形参 实参
            function test(a,b){
                alert(test.length);        // 形参个数
                //内部就是用一个数组去接受函数的实际参数,arguments 对象 可以访问函数的实际参数,只能在函数的内部访问和使用 
                alert(arguments.length);
                alert(arguments[0]);
                alert(arguments[1]);
                if(arguments.callee.length == arguments.length){
                    return a+b;
                } else {
                    return '参数不正确!';
                }
                //arguments对象 用的最多的 还是做递归操作
                //arguments.callee 指的是函数本身。
            }
            alert(test(10,20));        // 30    
            
            function fact(num){
                    if(num <=1) return 1 ;
                    else  return num*arguments.callee(num-1); //num*fact(num-1),fact只是一个变量名存的是函数地址,
            }        
            alert(fact(5));    
            var F = fact ;//函数名是函数对象的地址,是地址就有内存区域,执行就是地址名()小括号,var f = new F(),f就不是指向函数F的地址了,他是F类的对象,他的地址里面是对象,不仅仅是一个函数。
            fact = null;//就不能写num*fact(num-1),进一步证明了fact只是一个变量名存的是函数地址,
            alert(F(5));        
            </script>
        </head>
        <body>
        </body>
    </html>

     

  • 相关阅读:
    appdata文件夹有什么用途?C盘appdata可以删除吗?
    白话讲MyIsam和InnoDB的区别
    MVC&&MVP
    计算机程序的思维逻辑- 函数调用的基本原理
    猫狗收养所
    博客学习分类
    Android之操作SQLite
    总结---20160508
    对栈元素排序
    集合栈
  • 原文地址:https://www.cnblogs.com/yaowen/p/6863744.html
Copyright © 2020-2023  润新知