2013-04-01 2 views
1

다른 함수를 지정한 횟수만큼 호출하기 위해 작은 함수를 작성하려고합니다.JS : 함수를 여러 번 동적으로 호출하기

필자는 그렇게 할 수 있었지만,이 기능의 매개 변수를 지정하는 가장 좋은 방법은 무엇입니까?

doTimes(3, fn, param); 

쓰기와 같은 다음과 같습니다 : 그대로

var doTimes = function (times, fn, params) { 
    for (i=0; i<times; i++) { 
     fn(params); 
    } 
} 

는, 내가 좋아하는, 단지 하나 개의 매개 변수를 얻을에만 수있어

fn(param); fn(param); fn(param); 

하지만 만약 내가 가고 싶다

fn(param1,param2,param3); 

3 번 쓰지 않고는 그게 가능해?

+0

어쩌면 당신은 함수, 객체로 '의 PARAMS'을 만들 수 있습니다 당신은 당신이 같은'FN (PARAM1을 의미 – Ricky

+0

을 params.property에 액세스 , param2); fn (param1,2); fn (param1, param2)'? – aIKid

+0

@alKamili 예, Daniel Imms의 답변은 매력처럼 작동했습니다. –

답변

1

매우 유용하고 강력한 방법은 javascript의 함수에 .apply() 메서드를 사용하는 것입니다. .apply() 메서드를 사용하면 여러 인수로 다시 배열 할 배열을 전달할 수 있습니다. 그래서 기본적으로 당신은이 작업을 수행 할 수 있습니다

function doTimes (times, fn, paramsArray) { 
    for (i=0; i<times; i++) { 
     fn.apply(null,paramsArray); 
    } 
} 

참고하십시오 null 인수는 함수에 this 키워드 포인트가 호출되고 지정합니다. 중요하지 않은 경우 아무 것도 설정하지 마십시오 (이 경우 null). 중요한 경우 this을 참조해야하는 객체로 설정하십시오.

통화의 문서를 읽고 적용

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call

+0

paramsArray가 정의되지 않은 경우 undefined가 반환되므로 정의되지 않았는지 확인해야하며이 경우'fn.apply (null); '만 실행하면됩니다. –

+0

나는 그것이 필요하다고 생각하지 않는다. 테스트 한 브라우저에서 그들은 모두'fn.apply (null)'과 같이 undefined를 취급합니다. 그러나 어쨌든 그것을 검사하는 것이 좋은 습관이라고 생각합니다. – slebetman

+0

OK, 방금 사양을 확인했습니다. 그것은 null이나 undefined가'.apply()'에 의해 인수로 취급되지 않는다고 말합니다. 따라서 당신은 체크 할 필요가 없으며 undefined를 조용히 전달하여 적용 할 수 있습니다. – slebetman

0

arguments을 사용하여 함수 호출에 전달 된 모든 인수를 가져올 수 있습니다.

jsFiddle

arguments.length이 사용하는 얼마나 많은 당신이 테스트 할 수 있도록 arguments 그냥 배열입니다
var doTimes = function (times, fn) { 
    for (i=0; i<times; i++) { 
     fn(arguments[2], arguments[3], arguments[4]); 
    } 
} 

function test(a, b, c) { 
    alert(a + '\n' + b + '\n' + c); 
} 

doTimes(2, test, 1, 2, 3); 

참고.

+0

감사합니다. :) –

관련 문제