문제

For the following code:

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

How can you make this work properly, so inc and dec close upon value instead of creating separate function-local variables, in the way other than explicitly assigning something to value?

In plain Javascript, you would just declare var value at outer scope:

var value;

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

What is CoffeeScript way for exactly the same thing?

도움이 되었습니까?

해결책

In CoffeeScript, the way to introduce a local variable is to assign to the variable in the appropriate scope.

This is simply the way that CoffeeScript was defined and as such is similar to Python or Ruby, which do not require a "variable declaration", except CoffeeScript also allows forward access. A side-effect is that one cannot shadow a lexical variable.

Just as with the placement of var in JavaScript, where this assignment is done (as long as it is in the correct scope) does not affect the scope of the variable.

Given

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

Given

f = -> x
x = undefined
// JS
var f, x;
f = function() {
  return x;
};
x = void 0;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top