今天上午發生的事情讓我哭笑不得, 寫下來讓大家也樂樂.
上午看了 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” 非本人的通常寫法. 導致我用異同的眼光去看它.
結論: 多接觸接觸別人的代碼, 別人的寫法. 無論好壞對你也是一種提升!!!