console.log以及Node.js和CoffeeScript的函数执行

时间:2013-04-10 18:53:53

标签: javascript node.js coffeescript

我用节点编译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不执行拼接功能?! 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

Splice()修改数组并返回一个包含删除元素的数组。

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

console.log(arr);
[] 

console.log(a);
[1, 2]

答案 1 :(得分:2)

正如Rodrigo所说,splice返回初始数组,这导致了Coffee隐含的返回语句引起的误解。你的功能相当于:

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