簡體   English   中英

在javascript函數中將函數作為參數傳遞

[英]Passing a function as an argument in a javascript function

我想知道這是否合法。 我可以這樣的東西:

function funct(a, foo(x)) {
  ...
}

其中a是數組, x是另一個名為foo函數的整數參數?

(我的想法是讓一個函數在數組中使用for循環,並在數組中的每個元素的params中調用該函數。這個想法是在不同函數上調用它,因此兩個數組的元素相乘,然后總和加在一起。例如A[0] * B[0] + A[1] * B[1] 。)

我想這就是你的意思。

funct("z", function (x) { return x; });

function funct(a, foo){
   foo(a) // this will return a

}

這不是用另一個函數聲明函數作為其參數之一的方法。 這是:

function foodemo(value){
  return 'hello '+ value;
}

function funct(a, foo) {
  alert(foo(a));
}

//call funct
funct('world!', foodemo); //=> 'hello world!'

因此, funct的第二個參數是對另一個函數的reference (在本例中為foodemo )。 一旦調用該函數,它就會執行其他函數(在這種情況下使用第一個參數作為輸入)。

函數聲明中的參數只是標簽 它是賦予它們意義的功能體。 在此示例中,如果未提供第二個參數,則funct將失敗。 所以檢查它可能看起來像:

function funct(a, foo) {
  if (a && foo && typeof a === 'string' && typeof foo === 'function'){
    alert(foo(a));
  } else {
    return false;
  }
}

由於JS的性質,您可以在函數調用中使用直接函數調用作為參數(使用正確的函數定義):

function funct2(foo){
  alert(foo);
}

funct2(foodemo('world!')); //=> 'hello world!'

如果要傳遞函數,只需按名稱引用它而不使用括號:

function funct(a, foo) {
   ...
}

但有時您可能希望傳遞包含參數的函數,但在調用回調之前不要調用它。 要做到這一點,在調用它時,只需將其包裝在匿名函數中,如下所示:

funct(a, function(){foo(x)});

如果您願意,還可以使用apply函數並使用第三個參數作為參數數組,如下所示:

function myFunc(myArray, callback, args)
{
    //do stuff with myArray
    //...
    //execute callback when finished
    callback.apply(this, args);
}

function eat(food1, food2)
{
    alert("I like to eat " + food1 + " and " + food2 );
}

//will alert "I like to eat pickles and peanut butter"
myFunc([], eat, ["pickles", "peanut butter"]); 

我寧願建議創建如下變量:

var deleteAction = function () { removeABC(); };

並將其作為參數傳遞如下:

removeETC(deleteAction);

在removeETC方法中執行如下所示:

function removeETC(delAction){ delAction(); }

你提到的是合法的。 這里, foo(X)將被調用,其返回值將作為funct()方法的參數

你想要它實現什么? 看起來你把函數聲明與函數調用混淆了。

如果你想將另一個調用結果傳遞給函數,只需編寫函數funct(some_array, foo(x)) 如果你想傳遞另一個函數,那就寫funct(some_array, foo) 你甚至可以傳遞一個所謂的匿名函數函數funct(some_array, function(x) { ... })

事實上,似乎有點復雜,不是。

get方法作為參數:

 function JS_method(_callBack) { 

           _callBack("called");  

        }

您可以提供參數方法:

    JS_method(function (d) {
           //Finally this will work.
           alert(d)
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM