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)