关闭CoffeeScript中尚未定义的变量

时间:2014-05-02 21:37:49

标签: coffeescript closures

以下代码:

inc = -> value = (value ? 0) + 1
dec = -> value = (value ? 0) - 1
print = -> console.log value ? 0

如何使这项工作正常运行,incdec靠近value而不是创建单独的函数局部变量,而不是明确指定某些内容到value

在普通的Javascript中,您只需在外部范围声明var value

var value;

function inc() { value = (value || 0) + 1; };
function dec() { value = (value || 0) - 1; };
function print() { console.log(value || 0); };

对于完全相同的事情,CoffeeScript的方式是什么?

1 个答案:

答案 0 :(得分:2)

在CoffeeScript中, 引入本地变量方式是分配给适当范围内的变量。

这就是CoffeeScript的定义方式,因此类似于Python或Ruby,它不需要"变量声明",但CoffeeScript也允许转发访问。副作用是one cannot shadow a lexical variable

就像在JavaScript中放置var一样,其中完成此分配(只要它在正确的范围内)不会影响变量的范围。< / p>

鉴于

x = undefined
f = -> x
// JS
var f, x;
x = void 0;
f = function() {
  return x;
};

鉴于

f = -> x
x = undefined
// JS
var f, x;
f = function() {
  return x;
};
x = void 0;