美文网首页
JavaScript函数_ 09扩展

JavaScript函数_ 09扩展

作者: 凸小布 | 来源:发表于2017-03-02 21:43 被阅读1次

    01即时函数(立刻马上就调用执行的函数)

    即时函数的组成

    01 函数(函数名|参数|返回值|函数体)
    02 使用一个()把函数包裹起来
    03 使用一个()马上来调用这个函数

    即时函数的基本写法

    <script>
        (function(){
            console.log("第一种写法")
        })();
    
        (function(){
            console.log("第二种写法");
        }());
    
        +(function(){
            console.log("第三种写法");
        })();
    
        -(function(){
            console.log("第四种写法")
        })();
    
        !(function(){
            console.log("第五种写法")
        })()
    
    
    </script>
    

    即时函数的作用

    会创建一个函数作用域名,把所有的变量都包装在当前作用域当中,不会有全局变量污染的问题

    即时函数的参数和返回值问题

    <script>
        var result = (function(str){
            console.log(str);
            return function (){
                return str + '开始开始';
            }
        })("我是实参吧-----------");
    
        console.log(result());
    </script>
    

    即时对象初始化

    基本写法 : ({init:function(){}}).init()
    使用场景 : 初始化操作
    和惰性函数定义很像,如果在代码中需要做一些一次性的初始化操作,那么就可以使用这种方法

    <script>
        ({
            name : "王者荣耀",
            age : 9999,
            showName : function(){
                console.log(this.name);
            },
            showAge : function(){
                console.log(this.age);
            },
            init : function(){
                this.showName();
                this.showAge();
            }
        }).init()
    </script>
    

    惰性函数

    定义:函数的真正内容在调用一次之后才确定,能够实现自我更新

    应用场景:需要先做一次的初始化出处理

    使用注意:

    01 如果在函数上面添加了属性,那么进行自我更新之后这个属性会丢失
    02 如果把函数赋值给其他的变量,那么我们以变量的方式来调用,那么将会永远执行旧的函数体不会自我更新
    03 如果把函数赋值给对象,成为对象的方法,那么我们以对象的方法来调用

    基本写法

    <script>
        function foo(){
            console.log("foo!");
    
            //主要处理初始化操作......
    
            //实现函数的自我更新
            foo = function(){
                console.log("foo!! foo!!");
            }
        }
        foo(); //foo!
        foo(); //foo!! foo!!
        foo(); //foo!! foo!!
    </script>
    

    01 如果在函数上面添加了属性,那么进行自我更新后这个属性会丢失

    <script>
        function f1(){
            console.log("f1");
            f1 = function(){
                console.log("新的函数体");
            }
        }
    
        //函数是一个对象,因此可以添加属性
        f1.des = "描述信息";
        f1();
        console.log(f1.des); //undefined
        f1();
        f1();
    </script>
    

    02 如果把函数赋值给其他的变量,那么我们以变量的方式来调用,那么将会永远执行旧的函数体不会自我更新

    03 如果把函数赋值给对象,成为对象的方法,那么我们以对象的方法来调用

    <script>
        function f1(){
            console.log("f1");
            f1 = function(){
                console.log("新的函数体");
            }
        }
    
        // 把函数赋值给变量
       /* var func = f1;
        func(); //f1
        func(); //f1
        func(); //f1
        f1();*/
    
        // 把函数赋值给对象
        var obj = {};
        obj.demoFunc = f1;
        obj.demoFunc();
        obj.demoFunc();
        obj.demoFunc();
    
    </script>
    

    相关文章

      网友评论

          本文标题:JavaScript函数_ 09扩展

          本文链接:https://www.haomeiwen.com/subject/qlgkgttx.html