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