Javascript函数指针,参数作为函数中的参数

Jor*_*hns 14 javascript function-pointers function parameter-passing

不确定标题是否措辞正确,或者是否有更好的说法,但我认为没关系.

无论如何,到目前为止我理解以下内容:

a.b("a", "b", "c", foo);
Run Code Online (Sandbox Code Playgroud)

其中"foo"是其他地方定义的函数,它不接受任何参数,只会导致函数ab()运行,并带有上述参数.然后可以在函数ab()内调用参数"foo",简单地称为"foo()".换句话说,我理解上面的调用是使用函数指针作为函数ab中的参数作为参数.

好的,现在这就是我要做的......

我想能够做类似于上面的事情,除了这次我希望foo在该参数中传递一个参数,如下所示:

a.b("a", "b", "c", foo("bar"));
Run Code Online (Sandbox Code Playgroud)

现在这是问题所在.这将导致使用参数"a","b","c"和foo("bar")结果.我不想要这个.我希望foo("bar")按字面顺序传入,以便在函数ab中看起来像这样(作为标题):

a.b(first, second, third, fourth);
Run Code Online (Sandbox Code Playgroud)

可以引用并调用第四个参数:

fourth();
Run Code Online (Sandbox Code Playgroud)

即使"第四"中有一个论点.我似乎无法找到解决这个问题的方法,有什么建议吗?

谢谢!

I H*_*azy 26

使用匿名函数来打包您的foo电话.

a.b("a", "b", "c", function() {return foo("bar");});
Run Code Online (Sandbox Code Playgroud)

如果需要保留this给定的值,可以使用它来调用它.call.您也可以传递给定的任何参数.

a.b("a", "b", "c", function(arg1, arg2) {return foo.call(this, "bar", arg1, arg2);});
Run Code Online (Sandbox Code Playgroud)

当然,这个功能不一定需要匿名.您也可以使用命名函数.

function bar(arg1, arg2) {
    return foo.call(this, "bar", arg1, arg2);
}
a.b("a", "b", "c", bar);
Run Code Online (Sandbox Code Playgroud)