Javascript 将变量传递到回调函数,但它';现在是';未定义';

Javascript 将变量传递到回调函数,但它';现在是';未定义';,javascript,reactjs,azure,maps,azure-maps,Javascript,Reactjs,Azure,Maps,Azure Maps,我正试图将一个变量传递到一个回调函数中,该函数是Azure Maps事件侦听器的一部分,但一旦我控制台将该变量记录到另一个函数中,该变量就会显示为“未定义”。不知道我做错了什么。我是否以错误的方式将变量传递给回调函数 loadData = () => { let dataSource = new window.atlas.source.DataSource('map', { cluster: true, clusterRadius: clusterRadiu

我正试图将一个变量传递到一个回调函数中,该函数是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一直未定义。我知道它不是未定义的,因为我在loadData函数中记录了变量,并且我正在获取一个包含所有数据的对象。

首先,您在
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);
设x=‘你好’;
让caller1=x=>callback(x);
让caller2=()=>回调(x);
调用者1();//未定义

调用者2();/'您好“
您可能需要注意,回调参数不是由我们的代码决定的,因为我们不是运行回调的人。这超出了我们的控制范围。因此,您必须查看文档,以查看回调函数将接受哪些参数,并仅使用这些参数。谢谢!这是可行的,我一直认为在将变量传递给回调函数之前,必须在arrow函数中将其作为参数调用。今天我学到了一些新的东西。@Rchan如果上面的回答帮助/解决了您的问题,请接受回答。