令我哭笑不得的 coffeeScript 编译 - 费时工作篇

   今天上午发生的事情让我哭笑不得, 写下来让大家也乐乐. 

  上午看了 coffeeScript 其中被编译的一段代码让我产生了兴趣:

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;

  

result --- >  

  我主要是针对 "[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6]))" 做了测试. 带着一个疑问 "splice 的第一个怎么可以是 数组?" 带着可能会存在类似 “function serialisation" 的神秘功能, 我做了理深一步的"调查". (哈哈 悲剧开始了...)!

  首先我想知道 V8 是如何处理 splice 的(我主要是使用 chrome 做测试)  

  

  看到 “TO_INTEGER(start)” 的时候我惊讶了, 它是如何操作数组的? deep...

  又看了 V8 功能函数API 上说明 "如果传递给函数的值包含字母数字字符,则返回零。"  我曹 凌乱了....

  心想难到 coffeeScript 上的例子

  

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;

  是怎么回事儿 ? 

      FUCK 结果仔细一看  apply 的第二个参数是接受 一个数组类型参数。和 splice JM关系没有. 

  结论

  当代码非通常写法的时候, 可能会有"视觉欺骗".  出现以上 费时工作的主要原因 是因为  “[3,4].concat(_ref = [-3, -4, -5, -6]), _ref” 非本人的通常写法. 导致我用异同的眼光去看它. 

结论: 多接触接触别人的代码, 别人的写法. 无论好坏对你也是一种提升!!!

posted @ 2012-12-06 14:53  Enein  阅读(2251)  评论(6编辑  收藏  举报