2014-10-08 4 views
1

런타임에 다른 함수 B를 매개 변수로 받아 들여 호출하는 함수 A가 있습니다. 문제는 함수 B는 몇 가지 매개 변수를 필요로하지만, 나는 함수 A에, 매개 변수, 함수 B를 전달하는 방법을함수를 호출하지 않고 사용자 지정 매개 변수를 사용하여 함수를 지정하십시오.

예 모르는 :

function callerFunction(c) 
{ 
alert("The caller is calling the function!"); 
c(c.arguments); 
}; 
var a = "hello"; 

function thisOne(d) 
{ 
    d = "I changed my way"; 
    alert(d); 
}; 
callerFunction(/* I NEED TO PASS THE 'thisOne' with the parameter/variable 'a' here, and then call it inside 'callerFunction' */); 

답변

3

그냥 클로저를 전달합니다 :

callerFunction(function() { thisOne(a); }); 

그리고 c()하지 c(c.arguments)로 호출합니다.

이 익명 함수는 a 값이 아니라 a 변수를 참조합니다. 따라서 callerFunction()이이 함수 객체를 저장하고 나중에 호출하는 경우 a의 값을 익명 함수를 전달할 때와 호출 할 때 사이를 변경하면 익명 함수의 관점에서 a의 값이 변경되었습니다.

var a = 1; 

var fn = function() { console.log(a); }; 

fn(); // Logs 1 

a = 2; 
fn(); // Logs 2 
+0

나는 그것에 대해서도 생각했지만 다른 방법이 있습니까? 나는 필요한 함수를 호출하는 또 다른 함수를 만들지는 않는다. 이 새로운 '중간'기능을 사용하지 않는 방법. – sigur

+0

@sigur 클로저와 퍼스트 클래스 기능을 가진 언어로 이것을 수행하는 가장 간단한 방법입니다. 이것은 매우 일반적인 패턴이라는 것을 알게 될 것입니다. – cdhowie

관련 문제