[javascript] JavaScript 함수를 매개 변수로 전달
“부모”함수에서 함수를 실행하거나 사용하지 않고 함수를 매개 변수로 전달하는 방법은 eval()
무엇입니까? (나는 그것이 안전하지 않다는 것을 읽은 이래로.)
내가 이거 가지고있어:
addContact(entityId, refreshContactList());
작동하지만 문제는 refreshContactList
함수에서 사용될 때가 아니라 함수가 호출 될 때 발생한다는 것입니다.
나는 그것을 사용하여 해결할 수는 eval()
있지만 읽은 내용에 따르면 모범 사례는 아닙니다. JavaScript에서 함수를 매개 변수로 전달하려면 어떻게해야합니까?
답변
괄호를 제거하면됩니다.
addContact(entityId, refreshContactList);
그런 다음 먼저 함수를 실행하지 않고 함수를 전달합니다.
예를 들면 다음과 같습니다.
function addContact(id, refreshCallback) {
refreshCallback();
// You can also pass arguments if you need to
// refreshCallback(id);
}
function refreshContactList() {
alert('Hello World');
}
addContact(1, refreshContactList);
답변
함수를 전달하려면 괄호없이 이름으로 참조하십시오.
function foo(x) {
alert(x);
}
function bar(func) {
func("Hello World!");
}
//alerts "Hello World!"
bar(foo);
그러나 때로는 인수가 포함 된 함수를 전달하고 싶지만 콜백이 호출 될 때까지 호출하지 않을 수도 있습니다. 이렇게하려면 호출 할 때 다음과 같이 익명 함수로 래핑하십시오.
function foo(x) {
alert(x);
}
function bar(func) {
func();
}
//alerts "Hello World!" (from within bar AFTER being passed)
bar(function(){ foo("Hello World!") });
원하는 경우 apply 함수를 사용하고 다음과 같이 인수 배열 인 세 번째 매개 변수를 가질 수도 있습니다 .
function eat(food1, food2)
{
alert("I like to eat " + food1 + " and " + food2 );
}
function myFunc(callback, args)
{
//do stuff
//...
//execute callback when finished
callback.apply(this, args);
}
//alerts "I like to eat pickles and peanut butter"
myFunc(eat, ["pickles", "peanut butter"]);
답변
예 1 :
funct("z", function (x) { return x; });
function funct(a, foo){
foo(a) // this will return a
}
예 2 :
function foodemo(value){
return 'hello '+value;
}
function funct(a, foo){
alert(foo(a));
}
//call funct
funct('world!',foodemo); //=> 'hello world!'
답변
함수를 매개 변수로 전달하려면 대괄호를 제거하십시오!
function ToBeCalled(){
alert("I was called");
}
function iNeedParameter( paramFunc) {
//it is a good idea to check if the parameter is actually not null
//and that it is a function
if (paramFunc && (typeof paramFunc == "function")) {
paramFunc();
}
}
//this calls iNeedParameter and sends the other function to it
iNeedParameter(ToBeCalled);
이것의 기본 개념은 함수가 변수와 매우 유사하다는 것입니다. 쓰는 대신
function ToBeCalled() { /* something */ }
당신은뿐만 아니라 쓸 수 있습니다
var ToBeCalledVariable = function () { /* something */ }
둘 사이에는 약간의 차이가 있지만 어쨌든 둘 다 함수를 정의하는 유효한 방법입니다. 이제 함수를 정의하고 변수에 명시 적으로 할당하면 다른 논리에 매개 변수로 전달할 수 있으며 대괄호가 필요하지 않습니다.
anotherFunction(ToBeCalledVariable);
답변
JavaScript 프로그래머에게는 “Eval is Evil”이라는 문구가 있으므로 모든 비용을 피해야합니다!
Steve Fenton의 답변 외에도 함수를 직접 전달할 수도 있습니다.
function addContact(entity, refreshFn) {
refreshFn();
}
function callAddContact() {
addContact("entity", function() { DoThis(); });
}
답변
나는 그 문제로 모든 머리카락을 잘랐다. 위의 예제를 작동시킬 수 없으므로 다음과 같이 끝났습니다.
function foo(blabla){
var func = new Function(blabla);
func();
}
// to call it, I just pass the js function I wanted as a string in the new one...
foo("alert('test')");
그리고 그것은 적어도 내가 필요한 것에 매력처럼 작동합니다. 그것이 도움이되기를 바랍니다.
답변
매개 변수를 배열에 넣은 다음 .apply()
함수를 사용하여 분할하는 것이 좋습니다 . 이제 많은 매개 변수가있는 함수를 쉽게 전달하고 간단한 방식으로 실행할 수 있습니다.
function addContact(parameters, refreshCallback) {
refreshCallback.apply(this, parameters);
}
function refreshContactList(int, int, string) {
alert(int + int);
console.log(string);
}
addContact([1,2,"str"], refreshContactList); //parameters should be putted in an array