[英]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.