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>
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/6863744.html,如需转载请自行联系原作者

相关文章
|
17小时前
|
JavaScript 前端开发
JavaScript作用域关乎变量和函数的可见范围。
【6月更文挑战第27天】JavaScript作用域关乎变量和函数的可见范围。全局作用域适用于整个脚本,局部作用域限于函数内部,而ES6引入的`let`和`const`实现了块级作用域。全局变量易引发冲突和内存占用,局部作用域在函数执行后消失,块级作用域提高了变量管理的灵活性。作用域关键在于组织代码和管理变量生命周期。
8 1
|
2天前
|
自然语言处理 前端开发 JavaScript
JavaScript 函数指南:掌握编程密钥库的精髓
JavaScript 函数指南:掌握编程密钥库的精髓
|
2天前
|
前端开发 JavaScript 安全
解锁 JavaScript ES6:函数与对象的高级扩展功能
解锁 JavaScript ES6:函数与对象的高级扩展功能
|
2天前
|
JavaScript
js -- 函数总结篇,函数提升、动态参数、剩余参数、箭头函数、this指向......
js -- 函数总结篇,函数提升、动态参数、剩余参数、箭头函数、this指向......
|
2天前
|
存储 JavaScript 前端开发
JavaScript——JavaScript基础:数组 | JavaScript函数:使用、作用域、函数表达式、预解析
在JavaScript中,内嵌函数可以访问定义在外层函数中的所有变量和函数,并包括其外层函数能访问的所有变量和函数。①全局变量:不在任何函数内声明的变量(显式定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量,它在同一个页面文件中的所有脚本内都可以使用。函数表达式与函数声明的定义方式几乎相同,不同的是函数表达式的定义必须在调用前,而函数声明的方式则不限制声明与调用的顺序。③块级变量:ES 6提供的let关键字声明的变量称为块级变量,仅在“{}”中间有效,如if、for或while语句等。
17 0
|
2天前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包是函数访问外部作用域变量的能力体现,它用于封装私有变量、持久化状态、避免全局污染和处理异步操作。
【6月更文挑战第25天】JavaScript闭包是函数访问外部作用域变量的能力体现,它用于封装私有变量、持久化状态、避免全局污染和处理异步操作。闭包基于作用域链和垃圾回收机制,允许函数记住其定义时的环境。例如,`createCounter`函数返回的内部函数能访问并更新`count`,每次调用`counter()`计数器递增,展示了闭包维持状态的特性。
16 5
|
2天前
|
存储 JavaScript 前端开发
JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)
【6月更文挑战第25天】JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)。
8 2
|
2天前
|
JavaScript 前端开发
JavaScript函数核心概念:用于代码复用与管理。
【6月更文挑战第25天】JavaScript函数核心概念:用于代码复用与管理。示例包括定义(无参、有参、有返回值)与调用,参数按值传递。函数内修改参数不影响外部变量。
7 1
|
4天前
|
设计模式 JavaScript 前端开发
JS 代码变量和函数的正确写法大分享
在开发中,变量名,函数名一般要做到清晰明了,尽量做到看名字就能让人知道你的意图,所以变量和函数命名是挺重要
11 2
|
5天前
|
JavaScript 前端开发
JavaScript函数是代码复用的关键。使用`function`创建函数
【6月更文挑战第22天】JavaScript函数是代码复用的关键。使用`function`创建函数,如`function sayHello() {...}`或`function addNumbers(num1, num2) {...}`。调用函数如`sayHello()`执行其代码,传递参数按值进行。函数可通过`return`返回值,无返回值默认为`undefined`。理解函数对于模块化编程至关重要。
16 4