배열을 매개 변수로 사용하여 함수를 호출하고 싶습니다.
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)">