[javascript] JavaScript에서 배열을 함수 매개 변수로 전달

배열을 매개 변수로 사용하여 함수를 호출하고 싶습니다.

const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it

function call_me (param0, param1, param2 ) {
  // ...
}

내용을 전달하는 더 좋은 방법이 있나요 x으로는 call_me()?



답변

const args = ['p0', 'p1', 'p2'];
call_me.apply(this, args);

에 대한 MDN 문서를 참조하십시오 Function.prototype.apply().


환경이 ECMAScript 6을 지원하는 경우 스프레드 인수를 대신 사용할 수 있습니다 .

call_me(...args);


답변

왜 전체 배열을 전달하고 함수 내에서 필요에 따라 처리하지 않습니까?

var x = [ 'p0', 'p1', 'p2' ];
call_me(x);

function call_me(params) {
  for (i=0; i<params.length; i++) {
    alert(params[i])
  }
}


답변

call_me가 전역 함수라고 가정하면이 설정이 예상되지 않습니다.

var x = ['p0', 'p1', 'p2'];
call_me.apply(null, x);


답변

ES6 표준에는 정확하게이를 수행 하는 새로운 스프레드 연산자 ... 가 있습니다.

call_me(...x)

IE를 제외한 모든 주요 브라우저에서 지원됩니다.

스프레드 연산자는 다른 많은 유용한 작업을 수행 할 수 있으며 링크 된 문서는이를 잘 보여줍니다.


답변

@KaptajnKold가 대답했듯이

var x = [ 'p0', 'p1', 'p2' ];
call_me.apply(this, x);

또한 call_me 함수에 대한 모든 매개 변수를 정의 할 필요는 없습니다. 당신은 그냥 사용할 수 있습니다arguments

function call_me () {
    // arguments is a array consisting of params.
    // arguments[0] == 'p0',
    // arguments[1] == 'p1',
    // arguments[2] == 'p2'
}


답변

이것에 주목

function FollowMouse() {
    for(var i=0; i< arguments.length; i++) {
        arguments[i].style.top = event.clientY+"px";
        arguments[i].style.left = event.clientX+"px";
    }

};

// —————————

html 페이지

<body onmousemove="FollowMouse(d1,d2,d3)">

<p><div id="d1" style="position: absolute;">Follow1</div></p>
<div id="d2" style="position: absolute;"><p>Follow2</p></div>
<div id="d3" style="position: absolute;"><p>Follow3</p></div>


</body>

Args로 함수 호출 가능

<body onmousemove="FollowMouse(d1,d2)">

또는

<body onmousemove="FollowMouse(d1)">


답변

함수 인수는 배열 일 수도 있습니다.

function foo([a,b,c], d){
  console.log(a,b,c,d);
}

foo([1,2,3], 4)

물론 하나의 확산 을 사용할 수도 있습니다 .

function foo(a, b, c, d){
  console.log(a, b, c, d);
}

foo(...[1, 2, 3], 4)