将变量传递到回调函数中,但它显示为“未定义”

时间:2019-05-01 20:34:01

标签: javascript reactjs azure maps azure-maps

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

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保持未定义状态。我知道它不是未定义的,因为我在console中记录了loadData函数中的变量,并且正在获取一个包含所有数据的对象。

1 个答案:

答案 0 :(得分: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'

这称为“阴影”顺便说一句(wiki)。