如何执行一个方法作为parameter passing给函数
我想在JavaScript中编写自己的函数,它采用callback方法作为参数,并在完成后执行它,我不知道如何调用我的方法中作为parameter passing的方法。 像反思一样。
示例代码
function myfunction(param1, callbackfunction) { //do processing here //how to invoke callbackfunction at this point? } //this is the function call to myfunction myfunction("hello", function(){ //call back method implementation here });
你可以把它叫做普通函数:
function myfunction(param1, callbackfunction) { //do processing here callbackfunction(); }
唯一的额外的事情是提到上下文 。 如果你想在你的callback中使用this
关键字,你必须分配它。 这是经常需要的行为。 例如:
function myfunction(param1, callbackfunction) { //do processing here callbackfunction.call(param1); }
在callback中,您现在可以像this
访问param1
。 请参阅Function.call
。
我也进入了相同的情况下,我必须调用作为参数发送到另一个函数的function。
我试过了
mainfunction('callThisFunction');
第一种方法
function mainFuntion(functionName) { functionName(); }
但最终会出现错误。 所以我试了
第二种方法
functionName.call().
仍然没有用。 所以我试了
第三种方法
this[functionName]();
像冠军一样工作。 所以这只是添加一个更多的调用方式。 可能是我的第一和第二种方法可能会有问题,但是我花更多的时间去花时间去第三种方法。
function myfunction(param1, callbackfunction) { //do processing here callbackfunction(); // or if you want scoped call, callbackfunction.call(scope) }
另一种方法是将您的函数声明为匿名函数并将其保存在一个variables中:
var aFunction = function () { };
之后,您可以传递一个函数作为参数myfunction并正常调用它。
function myfunction(callbackfunction) { callbackfunction(); } myfunction(aFunction);
但是,正如其他答案已经指出,没有必要,因为你可以直接使用函数名称。 由于评论中的讨论,我将保留原样的答案。
我会做这样的事情
var callbackfunction = function(param1, param2){ console.log(param1 + ' ' + param2) } myfunction = function(_function, _params){ _function(_params['firstParam'], _params['secondParam']); }
进入主代码块,有可能传递参数
myfunction(callbackfunction, {firstParam: 'hello', secondParam: 'good bye'});
这里的所有例子似乎都展示了如何声明,而不是如何使用它。 我想这也是为什么@Kiran有这么多问题。
诀窍是声明使用callback的函数:
function doThisFirst(someParameter, myCallbackFunction) { // Do stuff first alert('Doing stuff...'); // Now call the function passed in myCallbackFunction(someParameter); }
someParameter
位可以省略,如果不需要的话。
然后您可以使用callback如下:
doThisFirst(1, myOtherFunction1); doThisFirst(2, myOtherFunction2); function myOtherFunction1(inputParam) { alert('myOtherFunction1: ' + inputParam); } function myOtherFunction2(inputParam) { alert('myOtherFunction2: ' + inputParam); }
请注意callback函数是如何传入的,并且没有使用引号或方括号进行声明。
- 如果你使用
doThisFirst(1, 'myOtherFunction1');
它会失败。 - 如果你使用
doThisFirst(1, myOtherFunction3());
(我知道在这种情况下没有参数input),那么它会首先调用myOtherFunction3
这样就会产生意想不到的副作用。
object[functionName]();
对象:指对象的名称。
functionName:是一个我们用来调用函数的variables。
通过将用于引用函数名称的variables放在括号外的[]和()内,我们可以使用variablesdynamic调用对象的函数。 点符号不起作用,因为它认为'functionName'是函数的实际名称,而不是'functionName'所保存的值。 这让我发疯了一点点,直到我遇到这个网站。 我很高兴stackoverflow.com存在<3