javascript road trip3@codeSchool

本篇博文为codeSchool课程javascript——javascript road trip3笔记。

由于该网站很多表达很精辟,所以我能粘贴原文的地方就粘贴原文了,导致精致的英文和中文吐槽混杂,请见谅。

Level 1 - Forest of Function and Expression

  1. Building functions within code execution rather than at program load time:将function存在对象里。
  2. 传来传去把:
    var greeting = function () { 
        alert("Thanks for visiting the Badlands!\n"+"We hope your stay is...better than most.");
    };
    closeTerminal(greeting);
    function closeTerminal(message){
        ...
        message();
        ...
    }
  3. give flexibility in choosing which functionality to build :
    var greeting;
    //立一个flag
    if(flag){
        greeting = function(){alert("1");};
    }else{
        greeting = function(){alert("2");};
    }
    closeTerminal(greeting);
    function closeTerminal(message){
        message();
        //还有其他的东西
    }

与array玩耍时间

  1. map( )方法:用于array,具体做的事情就是把array一节一节拆下来,操作一下,然后依次按到一个新的数组里,just like a loop。如:
    var numbers = [1,2,3,4,5,6,7};
    //var出一个双倍的map
    var result = numbers.map(function(arrayCell){
            return arrayCell * 2;
        });
    顺序呢,暂时看到的都是从头至尾,然而我坚信,一定有很多花式玩法!亦可赛艇。
  2. 掐头去尾:push() ; shift()会返回被掐掉的头
  3. 小例子:订票系统
    //一个订票系统。有等待时间。
    //系统设定的等待时间
    var parkRides = [["Birch Bumpers",40],["Pines Plugue",55],["Cedar Coaster",20],["Ferris Wheel of Firs",90]];
    //出票的顺序
    var fastPassQueue = ["Cedar Coaster","Pines Plugue","Birch Bumpers","Pines Plugue"];
    var wantsRide = "Birch Bumpers";
    function buildTicket(allRides,passRides,pick){//订票系统的函数(系统设定,出票顺序,用户想要的票)
        if(passRides[0] == pick){//如果第一个出的就是用户想要的票(隐含条件为不用等待)
            var pass = passRides.shift();//从出票顺序摘掉第一个存进pass里
            return function(){alert("Quick! You've got a Fass Pass to " + pass + " !");
            };
        }else{//如果用户需要等待
            for(var i = 0; i < allRides.length;i++){//loop
                if(allRides[i][0] == pick){//寻找需要的票
                    return function(){alert("A ticket is printing for " + pick + "!\n" + "Your wait time is about " + allRides[i][1] + "minutes.");
                    };
                }
            }
        }
    }
    var ticket = buildTicket(parkRides,fastPassQueue,wantsRide);//定义调用订票系统
    ticket();//调用
    呵呵
  4. 要有return不知名函数的意识然而,可不可以在return的匿名函数中做判断,loop?why?可以,这就是闭包的起点。昨晚的一个疑问变成今天学的东西,我真是习习蛤蛤。

Cold Closures Cove (传说中的b包!)

推荐一篇文章:http://kb.cnblogs.com/page/110782/

  1. closure : Returning a function from a function , complete with variables from an external scope.
  2. local variables。函数内部可以读取全局变量。声明local variable请用var,否则声明了全局变量!
  3. chain scope。函数可以读取他外部的变量,因为它“feels like globle ones”。而打破作用于规则的那个货他就是闭包。
  4. package deal。通过以上两点,我们可以通过神奇的手法读取局部变量了:
    function f1(){
        var n=999;
        function f2(){
          alert(n);
        }
        return f2;
      }
      var result=f1();
      result(); // 999
  5. 除了可以读取局部变量,bb还有一个用处:让这些变量的值始终保持在内存中。(我暂且认为这是闭包的判断标准)
    function f1(){
        var n=999;
        nAdd=function(){n+=1}
        function f2(){
          alert(n);
        }
        return f2;
      }
      var result=f1();
      result(); // 999
      nAdd();
      result(); // 1000
  6. 下面来看code school上给出的订票例子:
    //用闭包订票的例子
    //订票系统,包含两个参数
    function buildCoveTicketMaker(){
        var passengerNumber = 0;
        return function(name){
            passengerNumber++;
            alert("Your boat is " + transport + " , " + name + " !\n You are passenger #" + passengerNumber + " !\n" );
        };
    }
    //传一个参数进去,此时,这个东西在内存里(即var的作用啊!),然而在传入第二个参数之前,他都无法执行
    var getSubmarineTicket = buildCoveTicketMaker("Submarine");
    var getBattleShipTicket = buildCoveTicketMaker("BattleShip");
    var getGaintSeagullTicket = buildCoveTicketMaker("GaintSeagull");
    //激活!
    getSubmarineTicket("Pancake Painter");
  7. 例子:
    //查询名单位置
    function assignTorpedo(name,passengerArray){//传入名字和名单array
        for (var i = 0;i<passengerArray.length;i++){
            if(passengerArray[i]==name){
                return function(){
                    alert(name + " , your pass at Torpedo #" + (i+1) + "!\n");
                };
            }
        }
    }
    var subPassengers = ["单狗","活够","巴嘎","261","xixi","pancake","huadabing","hehe"];
    var giveAssignment = assignTorpedo("261",subPassengers);//嘻嘻 调用闭包
    giveAssignment();

以上为lever2,明天继续


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值