COFFEESCRIPT系列教程(四)—函数

函数声明

CoffeeScript的函数声明很有意思,函数通过一组可选的圆括号包裹的参数, 一个箭头, 一个函数体来定义的。就像下面这样:

#编译前
square = (x) ->
  x * x

//编译后
var square;

square = function(x) {
  return x * x;
};

函数体另起一行来写,千万别忘了缩进代码,因为CoffeeScript是用缩进来区分代码块的。如果你不缩进的话,就是这个样子的:

#编译前
square = (x) ->
x * x

//编译后
var square;    
square = function(x) {};    
x * x;

如果函数没有参数的话,如下:

#编译前
square = ->
  x * x

#包括参数的括号可要可不要
square =() ->
  x * x

//编译后
var square;    
square = function() {
  return x * x;
}; 

多个参数用逗号隔开:

#编译前
square = (x, y) ->
  x * y
//编译后
var square;

square = function(x, y) {
  return x * y;
};

一个立即执行的匿名函数可以这样写:

#编译前
(->)()

//编译后
(function() {})();

CoffeeScript在编译后的函数体体会给你最后的代码加上一个return,如果你不想要这个return值得话,可以显式的return一个值:

#编译前
square = (x, y) ->
  x * y
  return 0

//编译后
var square;

square = function(x, y) {
  x * y;
  return 0;
};

函数调用

函数的调用和JavaScript的调用方式一样:

#编译前
str = ->
  return 'xxx'

str()

//编译后
var str;

str = function() {
  return 'xxx';
};

str();

如果函数有参数的话,可以省掉括号不写。没有参数的话,括号必不可少!:

#编译前
square = (x, y) ->
  x * y

square 2,4

//编译后
var square;

square = function(x, y) {
  return x * y;
};

square(2, 4);

函数要先声明,后调用!

默认参数

一些函数函数参数会有默认值, 当传入的参数的不存在时会被使用。

#编译前
square = (x, y = 2) ->
  x * y

square 3

//编译后
var square;

square = function(x, y) {
  if (y == null) {
    y = 2;
  }
  return x * y;
};

square(3);

如果有多个参数的话,必填参数在前,默认参数在后!大家想想为啥?

变参

JavaScript函数里可以使用arguments类数组对象获取不定参数。CoffeeScript在函数定义和调用里提供了变参的语法, 让不定个数的参数使用起来更愉悦一些。废话不多说,看例子:

#编译前
square = (x, y, z...) ->
  #todo

square 1,2,3,4,5

//编译后
var square,
  __slice = [].slice;

square = function() {
  var x, y, z;
  x = arguments[0], y = arguments[1], z = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
};

square(1, 2, 3, 4, 5);

变参一定要放到最后,看编译后的代码,第一个参数赋值给了x,第二个参数赋值给了y,剩余的参数被封装成一个数组给了z。实际上变参接受的是多余参数的数组集合。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值