使用coffeescript进行数组拼接,_ref是什么用于?

AJP*_*AJP 6 javascript apply array-splice coffeescript

在用于数组拼接的CoffeeScript文档中,尾随的目的是, _ref什么?

CoffeeScript的:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers[3..6] = [-3, -4, -5, -6]
Run Code Online (Sandbox Code Playgroud)

编译为:

var numbers, _ref;
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref;
Run Code Online (Sandbox Code Playgroud)

Fré*_*idi 7

那是因为CoffeeScript的切片操作想要返回它刚刚分配的切片,但是splice()会返回被删除的元素.

因此,为了实现这一点,它将构造编译成一个代码片段,首先将片段分配给局部_ref变量,然后使用逗号运算符在调用后返回该变量splice().

  • @AJP,可能是因为它可以生成相同的代码片段,无论调用者是否对返回的值感兴趣.换句话说,在后一种情况下"优化"`_ref`可能不值得在编译器上带来额外的复杂性. (2认同)