变量基础
对于变量的定义的话,形式如下所示
xxx = yyy
------编译后------
var xxx = yyy;
保留字
我们知道,在原生js中的保留字是不能作为变量名或者属性名的。如果我们确实需要特殊的属性名,则使用方括号的方式进行命名。
像这样:var obj["class"] = "hello";
但是这样的代码没有了一致性。在coffee里,做了统一的处理,我们可以来看看
obj.class = 'Yika'
------编译后------
obj["class"] = 'Yika';
我们再不需要担心自己的变量名是保留字的了。但请记住,仅仅是处理保留字,不包括数字等不合法变量名。
词法作用域
我们不需要为变量提供一个var
,因为coffee会为我们自行声明变量,让我们不需手动去写var
。但鉴于这个的原因,在写深层次嵌套的代码时,请不要让外部变量和内部变量同名,增加麻烦。我们可以看一下例子。
outer = 1
changeNumber = ()->
inner = 2
outer = 3
inner = new Obj()
----------编译后----------
var changeNumber, inner, outer;
outer = 1;
changeNumber = function() {
var inner;
inner = 2;
return outer = 3;
};
inner = new Obj();
我们可以看到,outer是在外层定义的,然后在函数内部再定义一次,就会对外部变量进行赋值。而inner的表现却不尽相同。如果没定义过inner,则函数内部的inner会成为一个局部变量。鉴于这种比较容易出错的特性,所以我们建议一旦要使用局部变量,请一定不要和外部变量重名,以免带来不必要的麻烦。