2014-12-30 3 views
3

호출 할 때 동일한 매개 변수를 반복하지 않아도 여러 번 호출 할 수있는 함수 매개 변수를 저장하는 변수를 만들려면 어떻게해야합니까? (다음 예제는 실제로 이 함수 매개 변수를 저장하기 위해을 원하는 경우가 아니지만 여러 위치에서 사용될 수있는 다양한 길이의 매개 변수가 여러 개있는 경우에는 매우 편리합니다.함수 매개 변수를 사용하여 변수 만들기

function showAlerts(alert1,alert2) { 
    console.log(alert1 + '\n' + alert2); 
} 

// I would like to be able to define a variable that can be called later 
// doing it this way (obviously) just runs the function immediately 
var alerts1 = showAlerts('test1','test2'); 
var alerts2 = [showAlerts('test3','test4')]; 
var alerts3 = ['test5','test6']; 

if(0===1) { 
    alerts1; 
} else if(1===0) { 
    alerts2; 
} else { 
    showAlerts(alerts3); 
} 

http://jsbin.com/cenili/1/edit?html,js,console

+1

사용 en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind), ['.call'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ 함수/호출), ['.apply'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)를 참조하십시오. 'bind'는이 경우에 유용합니다. 다른 곳에서는 다른 두 가지를 사용할 수 있습니다. –

+0

당신이 요구하는 것은 [부분 신청] (http://en.wikipedia.org/wiki/Partial_application)이라고합니다. 아마 거기에 답변을 기존 자바 스크립트 질문을 기대하지만, 나는 그것을 발견하지 못했고 당신에게 좋은 대답을주고 자바 스크립트로 충분히 편안하지 않아. – Air

답변

6

사용 .bind() : .bind()

var alerts1 = showAlerts.bind(undefined, "test1", "test2"); 

alerts1(); // note the() which are still necessary to call the function 

첫 번째 매개 변수는 함수가 호출 될 때 this에 바인딩되는 값이며, 그 대부분의 사람들이 .bind()와 함께 할거야. 그러나 추가 인수는 매개 변수로 전달됩니다.

매개 변수를 alerts1()과 함께 전달할 수 있으며 세 번째, 네 번째, 다섯 번째 등의 매개 변수가 있습니다.

+1

일단 바인딩하면 다른 매개 변수를 다시 바인딩 할 수 없습니다. – CrimsonChris

+0

@Pointy 매력처럼 작동합니다. 감사! – Realto619

-2

클로저를 사용하면 반환되는 내부 함수에 매개 변수가 바인딩됩니다. 게다가 그것은 크로스 브라우저는 이전 버전의 브라우저에서 작동 지원하지 않는 것입니다 bind

function getShowAlertsFunc() { 
    var args = arguments 
    return function() { 
     for(var i=0; i<args.length; i++) { 
      console.log(args[i]); 
     } 
    } 
} 

당신은 [`.bind`]에 대한 몇 가지 독서 (https://developer.mozilla.org/을해야

var alert1 = getShowAlertsFunc("john", "doe") 
var alert2 = getShowAlertsFunc("jane", "doe") 
var alert3 = getShowAlertsFunc("test", "abc", "123") 

alert1() 
alert2() 
+1

질문에 대답하지 않습니다. – CrimsonChris

+0

그것은 측면 사고라고 불리는 것입니다 ... – user2727195

+0

이 답변은 매개 변수 개수가 다양하고 함수 매개 변수를 저장하는 변수를 어떻게 만들 수 있습니까? –

관련 문제