Javascript coffeescript.org示例中的拼接逻辑

Javascript coffeescript.org示例中的拼接逻辑,javascript,coffeescript,Javascript,Coffeescript,在coffeescript.org上漫游时,一眼就能看出这个从coffeescript.org编译为js的极其简单的例子: 咖啡: Js: 在本例中,当点击站点上的run按钮时,返回该数字变量, 但是如果查看最后一行JS,我们会得到逗号后面的_ref,如果相信JS文档的优先级最低,但最终返回了正确的结果,在这里我的视觉逻辑被打破了,那么编写这样的代码有什么意义呢?为什么我们需要在concat中缓存这个_ref,然后在paren返回逗号后,我的头就爆炸了,为什么???有什么建议吗?用这行代码: n

在coffeescript.org上漫游时,一眼就能看出这个从coffeescript.org编译为js的极其简单的例子: 咖啡:

Js:

在本例中,当点击站点上的run按钮时,返回该数字变量,
但是如果查看最后一行JS,我们会得到逗号后面的_ref,如果相信JS文档的优先级最低,但最终返回了正确的结果,在这里我的视觉逻辑被打破了,那么编写这样的代码有什么意义呢?为什么我们需要在concat中缓存这个_ref,然后在paren返回逗号后,我的头就爆炸了,为什么???有什么建议吗?

用这行代码:

numbers[3..6] = [-3, -4, -5, -6]
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref;
你想退货什么?Javascript中的所有表达式(可能还有Coffeescript中的表达式)都有一个返回值。
=
的典型返回值位于运算符的右侧。所以我们需要返回数组
[-3,-4,-5,-6]
。我们不能只返回任何旧数组:我们需要返回那个数组。(请记住,Javascript数组是通过引用传递的。)

所以当我们看这行代码时:

numbers[3..6] = [-3, -4, -5, -6]
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref;
首先计算逗号的左侧,执行我们想要的操作。但是,这将返回
splice
的返回值,这不是我们想要的,因为这将是从原始数组中删除的元素。所以我们需要逗号运算符

逗号运算符,如所述:

计算其两个操作数(从左到右)并返回第二个操作数的值

表面上看,你会认为我们可以这样做:

[].splice.apply(numbers, [3, 4].concat([-3, -4, -5, -6])), [-3, -4, -5, -6];
但这是错误的。好的,在这里它可能会起作用。但我们不想返回包含这些元素的数组。不,我们要返回原始数组,即我们在
concat
调用中使用的相同数组。因此,我们需要缓存该值(在
\u ref
中),然后在逗号后再次引用它