coffeescript中有哪些_ref用法?

时间:2014-10-17 11:32:11

标签: javascript coffeescript

请考虑以下情况:您无法直接访问for循环的数组,例如

for x, y in [1,2,3]
  console.log x, y, [1,2,3].length

其中需要再次键入数组[1,2,3]以访问其长度。 这编译成:

var x, y, _i, _len, _ref;

_ref = [1, 2, 3];
for (y = _i = 0, _len = _ref.length; _i < _len; y = ++_i) {
  x = _ref[y];
  console.log(x, y, [1, 2, 3].length);
}

我们看到变量_ref已定义。

_ref就我而言可以在CoffeeScript中使用:

for x, y in [1,2,3]
  console.log x, y, _ref.length

工作正常,编译没有任何问题。

我可以看到这种方法可能会在以下情况下出现问题:

for x, y in [1,2,3,4,5,6]
  continue

for x, y in [1,2,3]
  console.log x, y, _ref.length

其中第二个循环中的_ref是第一个数组[1,2,3,4,5,6],而数组[1,2,3]设置为未使用的变量_ref1

那么,有没有办法以一种很好的方式解决这个问题,(明显的是将变量定义为[1,2,3])?

1 个答案:

答案 0 :(得分:3)

要解决您在不首先将变量放入变量时引用数组的潜在愿望,您可以使用Array#forEach(或其他各种变体,如someevery等。 )。他们接收数组引用作为第三个参数:

[1, 2, 3].forEach (e, i, a) ->
  console.log e, i, a

e =此次迭代的数组中的条目

i =此迭代的索引

a =数组引用

不要担心函数调用的运行时成本it's near enough to zero that it doesn't matter。请注意this在回调中具有不同的含义(除非您将thisArg参数传递给forEach)。我不知道CoffeeScript是否为您提供语法糖,使其成为非问题(我不使用CoffeeScript)......