我似乎无法谷歌的快速问题......
我想知道如何通过闭包来保持数组引用。我认为。我使用 AngularJS,但原始 JS 在我的试验中具有相同的行为。背景:想象一个记忆游戏,你匹配两个图像。当两个选定的图块不匹配时,它们会翻转,但仅在显示选定的图像之后。所以我想延迟翻转。我有一个数组,我 .filter 到一个新数组。
$scope.selectedTiles = $scope.tiles.filter($scope.filterSelected);
旁白:这个新数组;它只包含引用或数据副本吗?MDN 说
构造一个新数组,其中包含回调为其返回真值的所有值。
不是很清楚imo。我的结论是它们是参考。无论如何...
这个 selectedTiles 被发送到一个闭包以保留它的引用。只有它没有。
flipSelectedTiles = function (selection){
return function(){
selection.forEach($scope.flipTile);
}
};
function reset(selection){
return function(){
$scope.flipSelectedTiles(selection);
}
}
var resetTiles = reset(filteredTiles);
$timeout($scope.flipSelectedTiles($scope.selectedTiles), $scope.delay);
我需要这个,因为我打算在执行flipSelectedTiles 之前等待一段时间。我还需要立即清除 selectedTiles,以防有人点击另一张图片。
selectedTiles.splice(0, $scope.selectedTiles.length);
随着超时触发,数组为空,没有任何反应。
如何通过闭包保持数组引用?
编辑:这是纯 JS 中的小提琴http://jsfiddle.net/Tobis/TkjEF/ 编辑:添加了 flipSelectedTiles 函数