Javascript 使用coffeescript进行阵列拼接,_ref用于什么?
在CoffeeScript文档中,尾随的Javascript 使用coffeescript进行阵列拼接,_ref用于什么?,javascript,coffeescript,apply,array-splice,Javascript,Coffeescript,Apply,Array Splice,在CoffeeScript文档中,尾随的,\u ref的用途是什么 咖啡脚本: numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] numbers[3..6] = [-3, -4, -5, -6] 汇编至: 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])), _re
,\u ref
的用途是什么
咖啡脚本:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers[3..6] = [-3, -4, -5, -6]
汇编至:
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;
这是因为CoffeeScript的切片操作希望返回刚刚分配的切片,但返回已删除的元素
因此,为了实现这一点,它将构造编译成一个代码片段,首先将切片分配给一个本地
\u ref
变量,然后在调用splice()
+1以链接到逗号运算符后使用返回该变量,道格拉斯·克罗克福德(Douglas Crockford)建议不要使用它,因为它会导致“过于复杂的表达式”,所以我想我只是忘记了它。这可能无法回答,但您知道coffeeScript想要返回其刚刚分配的切片的原因吗?请记住,在本例中,它没有被任何东西使用。。。?谢谢。@AJP,可能是因为无论调用方是否对返回值感兴趣,它都可以生成相同的代码片段。换句话说,在后一种情况下,“优化”\u ref
可能不值得为编译器带来额外的复杂性。