The LiveScript Book

邂逅 LiveScript

就像很多现代化的语言一样,LiveScript 使用缩进来表示语句块,使用换行取代分号来表示一个语句的结束
(如果你想要一行多句你可以继续使用分号来进行断句)。

例如

1.  if 2 + 2 == 4
2. do-something!

将会翻译为

1.  if (2 + 2 == 4) {
2. doSomething();
3. }

你可以亲自使用 LiveScript 去将所有的例子转译成 JavaScript

为了简洁起见,你可以省略函数调用时所需的括号

1. add 2, 3

等价于 JavaScript 中的

1. add(2, 3);

现在注释变成这样了

1. #从行首到行尾

对于 Lisp 用户而言,你们将非常高兴看到可以在变量名和函数名中嵌入-,这些变量将会被翻译成驼峰形式的名字
例如 my-value = 2016 等价于 myValue = 2016

差点忘了,LiveScript 源码格式是
.ls

函数定义

LiveScript 中进行函数定义是非常地容易的

1.(x, y) -> x + y
2.
3.-> # 一个空函数
4.
5.times = (x, y) ->
6. x * y

正如你所看到的,函数定义是非常的简短的。你可能已经注意到了,我们省略了 return
LiveScript 中,几乎一切皆表达式,函数体内的最后一句将被作为返回值进行返回。
如果你想要,你仍然可以使用return进行强制返回。你也可以在->前使用!取消自动返回值。no-ret
= (x) !-> ...

赋值

基本的赋值操作正如你所想的那样,variable = value,变量的声明是没有必要的。但是,不像
CoffeeScript
如果你哟修改外层作用域内的变量,你得使用 :=

1.x = 10
2.
3.do ->
4. x = 5
5.
6.do ->
7. x := 2

转译为 JavaScript

1.var x;
2.x = 10;
3.
4.(function() {
5. var x;
6. return x = 5;
7.})();
8.
9.(function() {
10. return x = 2;
11.})();

几乎一切都是表达式意味着你可以这么做

1.x = if 2 + 2 == 4
2. then 10
3. else 0

对应的 JavaScript 是这样的

1.var x;
2.x = 2 + 2 === 4 ? 10 : 0;

就像循环,switch语句,甚至是try/catch语句,统统都是表达式

你可以在 LiveScript 中使用关键字 const 来声明常量,
在编译时将会进行语法检查,但是编译成的 JavaScript 代码并没有什么区别。

1.const x = 10
2.x = 0

将会收到提示redeclaration of constant "x"at line 2 col 1

但是对象并不会冻结即使你使用了const关键字,你依然可以修改它的属性和方法。如果你非得使得所有的变量变成常量,

那么你可以在编译时,添加-k或者-const参数。

 

最新文章

  1. 我读汤姆大叔的深入理解js(二)
  2. ADO.NET 3.5高级编程:应用LINQ&Entity Framework
  3. 【转】ASP.NET服务器控件使用之MultiView和View
  4. Android Service 生命周期和使用注意项
  5. PHP中date函数参数详解
  6. HDU3790
  7. visual studio问题集合
  8. Touch Handling in Cocos2D 3.x(三)
  9. Axure环境安装,组件引入,使用示例
  10. 二、Python-运算符、控制及循环语句
  11. MySQL InnoDB特性:两次写(Double Write)
  12. Collections.synchronizedMap()与ConcurrentHashMap的区别
  13. es6proxy
  14. 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)
  15. 【javascript】分享一款经典的日期控件 My97DatePicker
  16. Java_单例模式
  17. python: 随机选择
  18. Java上机试题1
  19. C++ 莫队算法(转)
  20. TArray数组

热门文章

  1. ubuntu中wine下安装QQ
  2. ssh框架出现Java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误
  3. POJ 3133 Manhattan Wiring (插头DP,轮廓线,经典)
  4. Python 学习日志9月20日
  5. 远程文件拷贝(fastcopy为例)
  6. KissXML的XPath选取问题
  7. python学习(day1)
  8. ajax的traditional属性
  9. nuxt 初接触
  10. 多维的vector定义和初始化