考虑下面的代码,它可以正常工作。这是一些调试的结果。它似乎有效,因为我已经将selectedRowNum包含在绑定中,但似乎我还需要将selectedRowNum作为参数包含在由.end运行的匿名回调中
这有意义吗?如果我绑定一个变量,我是否还必须将它作为参数包含在我绑定它的函数中?
makeList :: Sing d -> RecList (S d) Int
makeList SZ = Dim $ map Elem [0..]
makeList (SS d) = Dim $ repeat $ makeList d
答案 0 :(得分:3)
是的,你需要。
传递给bind()的args值将被添加到被调用函数参数列表中,因此您需要在目标函数中将其作为参数接收。
一个简单的例子是
function x(p1, p2, p3) {
console.log(p1, p2, p3)
}
var fn = x.bind(window, 1);
fn(2, 3);
fn('a', 'b');

我们将另一个参数1传递给绑定,当绑定函数被调用时,我们传递2
和3,现在当我们在方法中接收它时,我们需要有3个参数。
答案 1 :(得分:0)
您希望如何引用您尝试传入的绑定值?
function(selectedRowNum, err, res) {
此处selectedRowNum
只是对传入的第一个参数的引用。
嗯,从技术上讲,答案是你不需要的。您无法将其列为参数,并将其称为arguments[0]
答案 2 :(得分:0)
在匿名函数声明中并非绝对需要参数,因为您可以通过arguments
对象访问参数,如arguments[0]
和arguments[1]
。
但最好将它们声明为命名参数,因为它使您的代码更易于读写。如果你没有在匿名声明中将它们声明为命名参数,那么就没有用于引用它们的符号名称,你被迫使用arguments
对象来访问它们。
这是Javascript的一个重要方面。在函数声明中声明命名函数参数(无论是否匿名)只是为您提供了可以引用该特定参数的名称。由于具有符号名称是创建可读代码的重要部分,因此通常认为这是一个很好的做法。
除了第一个参数之外还使用带有参数的.bind()
时,您将在实际函数调用之前添加更多参数。这将在后面的参数列表中移动任何其他参数。为了访问正确的参数,匿名函数声明必须使用参数列表中右侧点的变量。如果您不包含通过.bind()
添加的额外变量,那么您的其他参数将不在适当的位置,并且将具有错误的值。