函数不尊重闭包
function doesn't respect closure
我正在尝试为数组中的每个项目执行一个函数,我知道关闭并通过使用 ES6 let
对此进行补偿,并尝试使用 forEach
如下:
this.tourIDS = [];
this.tours.forEach(tour => {
this.tourIDS.push(tour.tour_id);
});
this.tourIDS.forEach(id => {
this.map.setFilter('routes', ['==', 'tour_id', id]);
console.log(id);
});
这是 mapboxgl setFilter
函数,它采用这样的查询参数 ['==', 'tour_id', id]
,这里的想法是从 tourIDS
数组中为它包含的每个 id 传递一次 id。
所以预期的行为是让函数在数组中的每个元素上执行,但只有数组中的最后一个元素被执行,就好像没有闭包一样,但是 console.log(id)
被正确执行记录每个元素,所以为什么 console.log
可以工作而另一个功能不工作?!
正如@Keith 在他的评论中强调的那样,这不是循环的问题,而是 mapbox-gl js setFilter
本身的性质,因为调用函数会覆盖以前的过滤器。
我正在尝试为数组中的每个项目执行一个函数,我知道关闭并通过使用 ES6 let
对此进行补偿,并尝试使用 forEach
如下:
this.tourIDS = [];
this.tours.forEach(tour => {
this.tourIDS.push(tour.tour_id);
});
this.tourIDS.forEach(id => {
this.map.setFilter('routes', ['==', 'tour_id', id]);
console.log(id);
});
这是 mapboxgl setFilter
函数,它采用这样的查询参数 ['==', 'tour_id', id]
,这里的想法是从 tourIDS
数组中为它包含的每个 id 传递一次 id。
所以预期的行为是让函数在数组中的每个元素上执行,但只有数组中的最后一个元素被执行,就好像没有闭包一样,但是 console.log(id)
被正确执行记录每个元素,所以为什么 console.log
可以工作而另一个功能不工作?!
正如@Keith 在他的评论中强调的那样,这不是循环的问题,而是 mapbox-gl js setFilter
本身的性质,因为调用函数会覆盖以前的过滤器。