zoukankan      html  css  js  c++  java
  • [Javascript] Closure Cove, 1

    Returning a function from a function, complete with variables from an external scope, is called a closure.

    The entire contents of one of these inner functions will still be available outside the outermost function.

    Example:

    function buildTicket(allRides, passRides, pick){
        if(passRides[0]==pick){
            var pass = passRides.shift();
            return function(){alert("Quick! You've got a Fast Pass to "+ pass +"!");};        
        }else{
            for(vari = 0; i < allRides.length; i++){
                if(allRides[i][0]==pick){
                    return function(){alert("A ticket is printing for "+ pick + "!
    " +
                                            "Your wait time is about "+ allRides[i][1]+ "minutes.");};
                }
            }
        }
    }

    Simaple example:

    //Simple example
    function testClosure(){
        var x = 4;
        return x;
    }
    
    //We call testClosure() --> 4
    //But we call x --> undefined
    
    function textClosure(){
        var x = 4; //For closeX(), x just like a g_v
        function closeX(){ 
            return x;
        };
        return closeX;
    }
    var closureX = textClosure();
    closureX(); //We get 4, because, x is binded with closeX() 

    What Closure can be used in patical?

    --> A closure can make the creation of very similar funcitons ultra-efficient.

    See the image below, buildCoveTicketMarker function return function. 

    According the usage, we pass the fuction with different param, then assign to different variables:

    getSubmarineTicket, getBattleshipTicket, getGiantSeagullTicket

    They are very similar function, but different usage!

    Then we have a loot the what function return:

    All of three return the same function, and the transport, name variable still the same, becasue we didn't pass the param yet.

    ------------------------Ex------------------------------

    var hidden = mystery();
    var result = hidden(3);
    
    function mystery ( ){
      var secret = 6;
      function mystery2 ( multiplier ) { 
        multiplier *= 3;
        return secret * multiplier;
      }
      return mystery2;
    }
    // alert(result); --> 54
    
    
    var hidden = mystery(4);
    var result  = hidden(2);
    
    function mystery ( input ){
      var secret = 5;
      function mystery2 ( multiplier ) { 
        multiplier *= input;
        return secret * multiplier;
      }
      return mystery2;
    }
    // alert(result); --> 40
    
    
    var hidden = mystery(3);
    var jumble = mystery3(hidden);
    var result = jumble(2);
    
    function mystery ( input ){
      var secret = 4;
      input+=2;
      function mystery2 ( multiplier ) { 
        multiplier *= input;
        return secret * multiplier;
      }
      return mystery2;
    }
    function mystery3 ( param ){
      function mystery4 ( bonus ){
        return param(6) + bonus;
      }
      return mystery4;
    }
    // alert(result); --> 122
    
    function warningMaker( obstacle ){
      return function () {
        alert("Beware! There have been " + obstacle + " sightings in the Cove today!");
      };
    }
    
    var icebergAlert = warningMaker('iceberg');
    icebergAlert();
    
    function warningMaker( obstacle ){
      return function ( number, location ) {
        alert("Beware! There have been " + 
              obstacle + 
              " sightings in the Cove today!
    " +
              number + 
              " " + 
              obstacle + 
              "(s) spotted at the " + 
              location + 
              "!"
             );
      };
    }
    var killerPenguinAlert = warningMaker("killer penguin");
    var polarBearAlert = warningMaker("polar bear");
    var icebergAlert = warningMaker("iceberg");
    var flashBlizzardAlert = warningMaker("flash blizzard");
    var snowYetiAlert = warningMaker("snow yeti");
    
    killerPenguinAlert(6, "Ice Caves");
    snowYetiAlert(1, "Blizzard Beach");
  • 相关阅读:
    Tinyhttpd
    Fiddler教程(Web调试工具)
    windows消息值全部定义,从消息值得到消息名称(系统消息定义从0到1023,从1024开始就是WM_USER,但是中间有325个WM_undefined消息,估计是备用,另外各控件都有一些reserved消息,也是为了备用)LostSpeed
    生意经:凡是现今比较会赚钱或是规模比较大的软件公司大都属于开发"消费型软件"的公司(而且登广告,应该定低价进行销售)
    Folly: Facebook Open-source Library Readme.md 和 Overview.md(感觉包含的东西并不多,还是Boost更有用)
    DefaultFilesMiddleware中间件如何显示默认页面
    Linux模块编程框架
    编程一小时
    DirectoryBrowserMiddleware中间件如何呈现目录结构
    gRpc NET Core
  • 原文地址:https://www.cnblogs.com/Answer1215/p/3890799.html
Copyright © 2011-2022 走看看