1

我正在尝试将一个变量传递给一个回调函数,该函数是 Azure Maps 的事件侦听器的一部分,但是一旦我在另一个函数中 console.log 变量,该变量就会出现为“未定义”。不知道我做错了什么。我是否以错误的方式将变量传递给回调函数?

loadData = () => {
let dataSource = new window.atlas.source.DataSource('map', {
        cluster: true,
        clusterRadius: clusterRadiusLevel,
        clusterMaxZoom: maxClusterZoomLevel
      });
  maps.event.add('click', layer, (e,dataSource) => this.clickedCluster(e,dataSource)
}

clickedCluster = (e,dataSource) => {
console.log(dataSource)
}

loadData 函数肯定还有更多内容,但提供了足够的信息来说明我正在尝试做的事情。clickedCluster 中的 console.log 不断返回未定义。我知道它不是未定义的,因为我控制台记录了 loadData 函数中的变量,并且我得到了一个包含所有数据的对象。

4

1 回答 1

1

首先,您缺少在线上的关闭括号maps.event...

其次,不要dataSource在同一行包含匿名箭头函数的第二个参数:

let loadData = () => {
    let dataSource = new window.atlas.source.DataSource('map', {
        cluster: true,
        clusterRadius: clusterRadiusLevel,
        clusterMaxZoom: maxClusterZoomLevel
    });
    maps.event.add('click', layer, e => this.clickedCluster(e, dataSource));
};

let clickedCluster = (e, dataSource) => {
    console.log(dataSource)
};

强调为什么这是正确的,看看这个更简单的例子

let callback = a => console.log('callback', a);

let x = 'hello';

let caller1 = x => callback(x);
let caller2 = () => callback(x);

caller1(); // undefined
caller2(); // 'hello'

这被称为“阴影”顺便说一句(维基)。

于 2019-05-01T20:52:44.483 回答