2

nodeでCoffeeScriptをコンパイルします。スクリプトには、配列をクリアする関数があります。空の配列を console.log したい。3 つのブロック ログの違いがわかりません。

clearArray = (arr) ->
  arr.splice 0 , arr.length

#Block 1
arr = [1,2]
clearArray arr
console.log arr

#Block 2
array = [1,2]
console.log clearArray array

#Block 3
console.log clearArray [1,2] 

#Block 1 logs: []
#Block 2 & 3 log: [ 1, 2 ]

私の理解では、clearArray は arr.splice() の結果を返すため、すべてのブロックは "[ ]" をログに記録し、空の配列を返す必要があります。#Block2 &3 はスプライス関数を実行していないようです?! どんな助けでも大歓迎です。

4

2 に答える 2

4

Splice()配列をその場で変更し、削除した要素を含む配列を返します。

var arr = [1, 2];
var a = arr.splice(0, 2);

console.log(arr);
[] 

console.log(a);
[1, 2]
于 2013-04-10T18:59:20.390 に答える
2

Rodrigo が言うようspliceに、初期配列を返します。これは、Coffee の暗黙の return ステートメントによって引き起こされる誤解につながります。あなたの関数はこれと同等です:

clearArray = (arr) ->
  return arr.splice 0 , arr.length

これを解決するには、スライスされた配列を返す必要があります

clearArray = (arr) ->
  arr.splice 0 , arr.length
  return arr

これも同じです

clearArray = (arr) ->
  arr.splice 0 , arr.length
  arr
于 2013-04-10T19:15:14.763 に答える