zoukankan      html  css  js  c++  java
  • CoffeeScript学习(3)—— 函数

    CoffeeScript函数

    如果大家有看我之前关于ES6的箭头函数的话,这一篇也不会很难理解。我们这一次可以说一下,关于两者的一些细微差别。

    基本

    在CoffeeScript中,任何函数都是用箭头函数来表示的。也就是说,如果我们使用下列的方式书写coffee,编译是不予以通过的。

    function greeting(){ console.log('hello coffee') }  //error
    

    那我们该如何写函数呢?和ES6的arrows一样(不一样的地方待会儿会提及)。

    greeting = () ->
      console.log('hello coffee')
      
    -----------编译后-----------
    var greeting;
    
    greeting = function() {
      return console.log('hello coffee');
    };
    

    函数名字放在号前面,参数放在()里。编译后的script也是遵循every thing has a return。但是建议你在需要提前添加return的语句,自行添加。这样会使你的代码更清晰。

    请再次记住coffee的层次是通过缩进体现的,所以缩进是非常重要的!书写coffee,千万不能tab和space混用!如果混用了,记得使用你手中的IDE进行修正。

    关于this的=>胖箭头

    this,是Javascript学习中最重要的一个点。因为当我们理解清楚了this的指向后,我们的代码才会更简洁易用。我之前也写过一篇关于this指针的,欢迎围观吐槽。

    其实我在es6那篇也讲过了,es6的arrows,最好的一点就是帮我们解决了this的绑定问题。但是一旦我们不需要它对this进行绑定,我们就需要写非arrows型的函数,这不统一的感觉难免让人难受。那我们来看看coffee君,是怎么样处理这个事情的呢?

    obj = {
      string: 'hello coffee',
      greeting: () =>
        console.log(this.string)
    }
    -----------编译后-----------
      var obj;
    
      obj = {
        string: 'hello coffee',
        greeting: (function(_this) {
          return function() {
            return console.log(_this.string);
          };
        })(this)
      };
    

    当然,要看清楚,箭头是胖箭头=>。使用这种胖箭头,它便会为你处理this的绑定问题。我们也可以看一下coffee编译后的解决方案。

    其实就是包多了一层立即执行的匿名函数,并把this作为参数传进去。这样,this就会被_this所引用。这里利用了闭包,解决了this的指向问题。

    参数

    既然讲到了函数,那就顺便说一下和函数紧密相关的参数吧。

    默认值

    在我们使用原生js的时候,为了使传入的参数有默认值,我们需要自行对参数进行undefined和null判断,再为其赋初始值。这个过程其实是非常繁琐的。所以coffee为我们提供了语法糖,让我们处理默认值更顺手。来看一下代码:

    gretting = (time, name = 'Yika') ->
      console.log("good #{time}, #{name}")
    -----------编译后-----------
    var gretting;
    
    gretting = function(time, name) {
      if (name == null) {
        name = 'Yika';
      }
      return console.log("good " + time + ", " + name);
    };
    

    其实,默认值很简单对吧。编译后会自动为你判断name是否存在。这个不是重点,难道你没发现吗?重点在于,上面的例子,竟然出现了和模板引擎一样的东西。没错,#{}这个东西,会为你自动拼接字符串,让你省去烦恼!

    #{}

    既然提到了#{}这个东西,那我当然要告诉你一个坑,单引号和双引号不再一样了!当你要使用此类字符串模板一样的东西时,请时刻记住,使用双引号。只要是Js中的变量,它都会为你尝试用加号进行拼接。

    name = 'Yika'
    age = 20
    
    string = "My name is #{name}, I am #{age}"
    -----------编译后-----------
    var age, name, string;
    
    name = 'Yika';
    
    age = 20;
    
    string = "My name is " + name + ", I am " + age;
    
    

    其实函数的东西并不太多,你所要做的,就是不断训练自己用coffee优雅的书写代码。等你用的和原生Js一样习惯后,请享受它。

    我会选择sass和coffee,就是因为两者都是用缩进进行区分的。哈哈。

    最后,还是请大家记住,缩进!缩进!缩进!

  • 相关阅读:
    lombok介绍
    idea 离线安装 lombok插件
    Java中Lambda表达式的使用
    接口里的default,static方法
    Maven多环境配置实战 filter
    redis lua脚本学习
    redis的安装
    jdbc插入或查询数据库时间总是比实际时间少8小时原因
    [设计模式]单件模式
    [设计模式]命令模式
  • 原文地址:https://www.cnblogs.com/YikaJ/p/4321361.html
Copyright © 2011-2022 走看看