• 惰性函数——适合外层函数只需要执行一次


    如果函数内又定义了一个跟自己同名的函数,执行结果是什么? 

    function scareMe(){
        alert("Boo!");
        function scareMe(){
            alert("double boo!");
        }
        scareMe();
    }
    scareMe();

    结论:把函数名当变量理解,还遵循作用域链规则。即外部调用外部的,内部调用内部的。 


    优点是:可以延迟定义函数(同时将只执行一次的代码放到外层同名函数中) 

    var scareMe = function (){
        alert("Boo!");
        scareMe = function (){
            alert("double boo!");
        }
    }

    缺点是:如果将外部函数赋给某一个变量,或对象的key时,还指向外层同名函数。 

    var scareMe = function (){
        alert("Boo!");
        scareMe = function (){
            alert("double boo!");
        }
    }
     
    scareMe.property = "properly";
     
    var prank = scareMe;
    var spooky = {boo: scareMe};
     
    prank();//Boo!
    prank();//Boo!
    console.log(prank.property);//properly
     
    spooky.boo();//Boo!
    spooky.boo();//Boo!
    console.log(spooky.boo.property);//properly
     
    scareMe();//double boo!
    scareMe();//double boo!
    console.log(scareMe.property);//undefined
     
    spooky.boo();//Boo!
    console.log(spooky.boo.property);//properly


    结论: 
    //scareMe是指向外部function(){...}的指针 
    //赋值发生后,prank和spooky.boo也都是指向外部function(){...}的指针。 

    //指向了prank()方法后,scareMe是指向内部function(){} 
    //其实,执行prank()、spooky.boo()、scareMe()中的任一个效果都一样

    延迟自定义函数

    转载至:http://www.it610.com/article/33030.htm

  • 相关阅读:
    Cocos2d-x之物理世界(创建悬浮的物体)
    Cocos2d-x之物理世界(创建静态的物体)
    Cocos2d-x之物理世界(创建运动的物体)
    cocos2d-x之Node移除HelloWorld节点
    IFNULL NULLIF ISNULL
    表格导出
    random模块
    Echarts
    "==" 与 "is"的区别
    angular
  • 原文地址:https://www.cnblogs.com/jokes/p/9486787.html
Copyright © 2020-2023  润新知