나는 성공하지 않고 다음을 시도했다.
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
함수 a에서 arguments 키워드를 사용하여 인수 배열에 액세스 할 수 있습니다. 함수 b에서는 손실됩니다. 내가 시도하는 것처럼 다른 자바 스크립트 함수에 인수를 전달하는 방법이 있습니까?
나는 성공하지 않고 다음을 시도했다.
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
함수 a에서 arguments 키워드를 사용하여 인수 배열에 액세스 할 수 있습니다. 함수 b에서는 손실됩니다. 내가 시도하는 것처럼 다른 자바 스크립트 함수에 인수를 전달하는 방법이 있습니까?
답변:
다음 과 같이 function에서 .apply()
동일한 액세스 권한을 갖는 데 사용하십시오 .arguments
b
function a(){
b.apply(null, arguments);
}
function b(){
alert(arguments); //arguments[0] = 1, etc
}
a(1,2,3);
var copy = [].slice.call(arguments); <remove what you want> myFunc.apply(this, copy);
apply
이것을 이와 같이 사용 b
하면 (예를 들어 객체의 일부 내부 기능인 경우) 범위가
spread 연산자를 사용하면 여러 인수 (함수 호출) 또는 여러 요소 (배열 리터럴)가 필요한 위치에서 표현식을 확장 할 수 있습니다.
ECMAScript ES6는보다 실용적인 방식으로이를 수행 할 수있는 새로운 연산자를 추가했습니다. ... Spread Operator .
apply
방법 을 사용하지 않는 예 :
function a(...args){
b(...args);
b(6, ...args, 8) // You can even add more elements
}
function b(){
console.log(arguments)
}
a(1, 2, 3)
Note 브라우저가 여전히 ES5를 사용하는 경우이 스 니펫은 구문 오류를 리턴합니다.
편집자 주 : 스 니펫 사용하기 때문에 console.log()
, 당신이 있어야 브라우저의 JS 콘솔을 열은 결과를 볼 수 -가 없을 것입니다 아무 의 페이지 결과.
이 결과가 표시됩니다.
간단히 말해, 배열을 사용하는 경우 스프레드 연산자를 다양한 목적으로 사용할 수 있으므로 함수 인수에도 사용할 수 있습니다. 공식 문서에서 설명한 유사한 예제를 볼 수 있습니다. Rest 매개 변수
...args
에서 a
기능. 당신은 인수가없는 함수를 만들어에게 전달할 수 b
와...arguments
...args
으로 a
중첩 된 기능이있는 경우 입력의 중요 할 수있다.
다른 답변이 제공되지 않는다는 설명은 원래 인수 는 여전히 사용할 수 있지만 arguments
객체 의 원래 위치에는 있지 않다는 것입니다 .
arguments
목적 함수에 제공된 각각의 실제 파라미터에 대해 하나 개의 요소를 포함한다. 당신이 호출 할 때 a
번호 : 세 개의 인수를 공급 1
, 2
등을, 3
. 을 arguments
포함 [1, 2, 3]
합니다.
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
b
그러나을 호출하면 정확히 하나의 인수 ( a
's arguments
object) 를 전달 합니다. 그래서 arguments
포함 [[1, 2, 3]]
입니다 (즉, 하나의 요소 a
의 arguments
원래 인수로를 포함하는 속성이 객체를, a
).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
@Nick이 시연 한 것처럼 호출에서 apply
설정된 arguments
객체 를 제공하는 데 사용할 수 있습니다 .
다음과 같은 결과를 얻습니다.
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
그러나 apply
일반적인 경우에는 올바른 해결책입니다.
this
해야 apply
합니까?
이 시도
function global_func(...args){
for(let i of args){
console.log(i)
}
}
global_func('task_name', 'action', [{x: 'x'},{x: 'x'}], {x: 'x'}, ['x1','x2'], 1, null, undefined, false, true)
//task_name
//action
//(2) [{...},
// {...}]
// {
// x:"x"
// }
//(2) [
// "x1",
// "x2"
// ]
//1
//null
//undefined
//false
//true
//func
arguments
은 아니지만 배열과 같은 의미를 구현 하는 객체 이므로 실제로는 실제 배열과 동일한 방식으로 사용할 수 있는지 전혀 알 수 없습니다.