coffeescript html5,CoffeeScript函数

在 CoffeeScript 中函数通过“->”符号来定义。以下是一个简单的函数:

hi = -> “Hello ,World!”

如果要定义一个带参数的函数,则可以这样定义:

greeting = (name) -> “Hello, #{name}!”

可见只要在’->’ 之前添加类是函数定义时的(arguments)就可以为函数提供参数,并且通过在字符串中使用 #{} 引用参数变量就可以了。

如果可能有大量参数需要传递,也可以使用 arguments 对象:

greeting = –> “Hello, #{arguments[0]}!”

Javascript 中的标准函数在 CoffeeScript 也同样是兼容的,比如 Math

cube = (num) –> Math.pow num,3

注意到函数运行时并不要求使用 () 将参数包围。

如果传递的参数并不符合逾期可以抛出异常以获取问题出现的原因。

odd = (num) ->

if typeof num is ‘number’

if num is Math.round num

if num > 0

num % 2 is 1

else

throw “#{num} is not positive”

else

throw “#{num} is not an integer”

else

throw “#{num} is not a number”

要获取到程序抛出的错误信息,直接运行函数是不行的,可以使用 try..catch 语句获取:

try

odd 5.1

catch e

console.log e

当然也可以通过使用 unless 重写 odd 函数:

odd = (num) ->

unless typeof num is ‘number’

throw “#{num} is not positive”

unless num is Math.round num

throw “#{num} is not an integer”

unless num > 0

throw “#{num} is not a number”

num % 2 is 1

如果觉得这样的格式还太长了,也可以使用类似 ruby 的语法,使用 throw A unless B 的格式编写这个函数。

函数中还可以修改变量、运行其他函数,javascript 中的函数能做到的 CoffeeScript 中的函数一样能够做到。

count = 0

anyfunc = -> count++

anyfunc()

console.log count  #now count is 1

函数声明

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值