从 Javascript 函数访问参数

Accessing parameter from Javascript Function

提问人:Kira 提问时间:7/14/2023 更新时间:7/14/2023 访问量:34

问:

我正在使用 highcharts 4 javascript 库。 在 highcharts 中,您可以自定义图表的按钮。

带有自定义按钮的图表

这样做的方法是按下数组中的按钮(作为对象),然后将此数组包含在 Highcharts 配置中。

问题是,当我单击该按钮时,我无法访问附加到每个函数的参数

下面的代码显示了我如何创建按钮数组:

for(var i = 0; i < arr_papers.length; i++)
{
                var caption = arr_papers[i].caption;
                var colid = arr_papers[i].colid;
                
                buttons.push({
                    text: caption,
                    id : colid,
                    onclick: function () {
                        loadPerformanceBarChart(colid, caption);
                    }
                });
}

然后在 Highcharts 配置中,我包含了上面的数组:

var options = {
            chart: {
                type: 'bar',
                renderTo: 'bar_chart_stats'
            },
            title: {
                text: 'Num Students per Range'
            },
            exporting: {
                buttons: {
                    contextButton: {
                        menuItems: buttons
                    }
                }
            },
.
.
.
.

问题在于,当调用函数时,参数是数组中的最后一个参数。loadPerformanceBarChartcolid, caption

我怎样才能找到解决方法?谢谢。。

JavaScript Arrays 函数 对象

评论

2赞 Unmitigated 7/14/2023
使用 或 代替 。letconstvar
0赞 Kira 7/14/2023
找到解决方案: for (var i = 0; i < arr_papers.length; i++) { (function () { var caption = arr_papers[i].caption; var colid = arr_papers[i].colid; buttons.push({ text: caption, id: colid, onclick: function () { loadPerformanceBarChart(colid, caption); }, }); })();}
0赞 Kira 7/14/2023
onclick 函数将对所有按钮使用 colid 和 caption 的最终值,这可能不是您所期望的。若要解决此问题,可以使用立即调用函数表达式 (IIFE) 为循环的每次迭代创建一个新作用域。
0赞 Unmitigated 7/14/2023
这是一种极其过时的方法。只需使用 或 来声明变量。letconst
0赞 Kira 7/14/2023
是的,你是对的。使用使它起作用。多谢!let

答:

0赞 Unmitigated 7/14/2023 #1

使用 或 声明变量,用于块范围。letconst

const caption = arr_papers[i].caption, colid = arr_papers[i].colid;