如何从另一个有参数的函数调用带参数的函数?

How to call a function with parameters from another function that has parameters?

我正在使用 D3 和 JS。

我有一个创建按钮的函数,其中一个参数是 onClick,它在单击按钮时运行(很明显)。

例如:

simpleButton(imageURL, width, height, title, onClick){
.attr("xlink:href", imageUrl) //-original image
    .attr( "width", width) //-icon width
    .attr( "height", height) //-icon height
    .on("click", onClick)
    .append("svg:title")
    .text(title); //-give the button a title
}

现在我将使用我的一个按钮来隐藏一些形状(即设置 visibility:hidden)。

所以我创建了另一个函数来隐藏选择,例如:

hideSelection(selection){
    selection.classed("hidden", true);
}

这个函数接受一个参数,这样我就可以传递我想隐藏的东西。

例如,我认为可行的方法如下所示:

simpleButton("\images\dog", 100, 100, "dog", hideSelection(dog));

现在,这确实有效,但无需我点击它就立即有效。我知道这是因为我直接调用 hideSelection 因为括号 -().

但我的问题是,如何在运行时立即停止调用此函数?我如何通过另一个有参数的函数运行一个有参数的函数(如果这有意义的话)?

你应该将它包装在一个匿名函数中:

simpleButton("\images\dog",100,100, "dog", function() {
  hideSelection(dog)
});

此函数可以访问 dog 变量,因为它是一个 closure - 一个在创建时可以访问父作用域的函数。

您确实在立即调用 hideSelection(dog) 并将其 结果 传递给 simpleButton - 您需要传递 reference 到一个函数。最简单的方法是将其包装在另一个函数中:

simpleButton("\images\dog", 100, 100, "dog", function() {
    hideSelection(dog)
});

(P.S.You 可能也想转义图像路径中的 \s)