函数不尊重闭包

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 本身的性质,因为调用函数会覆盖以前的过滤器。