2

我用节点编译 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 回答