您的位置:首页 > Web前端

CoffeeScript入门实践

2013-09-14 01:03 567 查看


CoffeeScript入门实践http://www.w3ctech.com/p/1065

2012年03月01日 石川 JavaScript

嗨,大家好。

在这一期的节目中,我们将介绍下CoffeeScript, 那么什么是CoffeeScript呢?CoffeeScript是一门小语言,也是一个编译器。用CoffeeScript编写的代码,可以编译成JavaScript代码。

CoffeeScript简化了JavaScript的编写,同时运用了JavaScript最佳实践模式。

本期节目将分为3个部分

1. 第一部分中我们讲述安装的过程
2. 第二部分我们将看如何使用它
3. 第三部分中我们将看它如何简化了JavaScript的编写,同时怎么保证了最佳实践模式。

一、安装的过程

要安装CoffeeScript,需要先安装node.js和npm。在mac 和 linux 的环境下,CoffeeScript的安装是相当容易的。比较复杂的呢是在Windows的环境下安装。所以我们着重讲一下在Windows环境下的安装方式。

首先我们先到node.js的网站下载在Windows版本的node.js。下载地址:http://nodejs.org/#download

下载后只要双击msi文件便可安装,整个过程是自动的。最近,npm也被加入到Node的Windows版本中,所以就不用额外再安装了。

安装完Node(包括npm)后,我们到Programm Files下,可以看到nodejs文件夹,在文件夹里,有node.exe, 为了方便,我在桌面上放了个快捷方式。

之后,我们到CoffeeScript的github页面下载CoffeeScript:https://github.com/jashkenas/coffee-script/downloads

下载并解压,我下载的到版本解压缩后的目录是jashkenas-coffee-script-127653b。我们可以把它放到另一个目录中,在这里我们把它放在C盘的dev目录中。

此时,Node和CoffeeScript在硬盘中的目录分别是:

 Node:C:\Program Files\nodejs\

 CoffeeScript:C:\dev\jashkenas-coffee-script-127653b

接下来,在桌面上建一个文件,命名为coffee.cmd。在任何一种编辑器下打开它。在里面打入下面的一段命令:
@echo off

node.exe C:\dev\jashkenas-coffee-script-127653b\bin\coffee %*


保存文件。之后把这个coffee.cmd 放到nodejs目录内。

二、.使用

在dev或任何其他目录中,建立一个目录,比如js。

在这个文档下,我们创建一个文件,命名为test.coffee。

这时打开cmd,打入下面的命令:
> cd C:\dev\js

> coffee -w -c test.coffee
//-w 的全名是 --watch, 是实时编辑的命令

//-c 的全名是 --compile, 是编译的命令


这时,会看到js目录中生成了test.js。在编辑器中打开test.js,可以看到一个匿名函数。这时当我们在test.coffee中打入任何代码,保存后,可以看到test.js被同步更新。

除此之外,我们还可以看到很多其它的命令:

把src目录中的CoffeeScript文件目录树的js在lib目录中编译成平行树
coffee --compile --output lib/ src/


把多个文件串连成一个文件
coffee --join project.js --compile src/*.coffee

三、使用实例

(一) 函数

如果我们输入下面的代码:
square = (x) -> x * x


在保存后,看生成的文件,我们可以看到文件的最上方有 square 变量的声明,下面我们把一个匿名函数分配给了这个变量:
var square;

square = function(x) {

return x * x;

};


当我们再输入下面的代码时:
cube = (x) -> square(x) * x


会显示为:
var cube, square;

square = function(x) {

return x * x;

};
cube = function(x) {

return square(x) * x;

};


函数也可能有参数的默认值。用一个非空的参数覆盖默认值。
fill = (container, liquid = "coffee") ->

"Filling the #{container} with #{liquid}..."


会变为:
var fill;

fill = function(container, liquid) {

if (liquid == null) liquid = "coffee";

return "Filling the " + container + " with " + liquid + "...";

};

(二) 对象

下面的CoffeeScript:
kids =

brother:

name: "Max"

age: 11

sister:

name: "Ida"

age: 9


会显示为:
kids = {

brother: {

name: "Max",

age: 11

},

sister: {

name: "Ida",

age: 9

}

};


在JavaScript中,你不能使用保留字(???reserved words)。比如在没有用字符串引用它们的情况下,把class作为对象的属性。

CoffeeScript注意到用作键的对象和他们的报价为您的保留字,所以你不必担心它(例如,当使用jQuery)。下面这段:
$('.account').attr class: 'active'

log object.class


会显示为:
$('.account').attr({

"class": 'active'

});

log(object["class"]);

(三) 词法作用域和变量安全

这种行为实际上是相同于Ruby的局部变量作用域。

outer是不能重新声明在内部函数,因为它是已经在作用域内;

另一方面,inner在函数内部,不应该能够改变同名的外部变量的值,因此有自身的声明。

所以下面一段:
outer = 1

changeNumbers = ->

inner = -1

outer = 10

inner = changeNumbers()


会变成:
var changeNumbers, inner, outer;

outer = 1;

changeNumbers = function() {

var inner;

inner = -1;

return outer = 10;

};

inner = changeNumbers();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: