在JavaScript中,必须绑定参数是否在匿名函数参数中?

时间:2015-05-13 03:52:25

标签: javascript

考虑下面的代码,它可以正常工作。这是一些调试的结果。它似乎有效,因为我已经将selectedRowNum包含在绑定中,但似乎我还需要将selectedRowNum作为参数包含在由.end运行的匿名回调中

这有意义吗?如果我绑定一个变量,我是否还必须将它作为参数包含在我绑定它的函数中?

makeList :: Sing d -> RecList (S d) Int
makeList SZ = Dim $ map Elem [0..]
makeList (SS d) = Dim $ repeat $ makeList d

3 个答案:

答案 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()添加的额外变量,那么您的其他参数将不在适当的位置,并且将具有错误的值。