[javascript] 다른 자바 스크립트 함수로 인수 전달

나는 성공하지 않고 다음을 시도했다.

function a(args){
    b(arguments);
}

function b(args){
    // arguments are lost?
}

a(1,2,3);

함수 a에서 arguments 키워드를 사용하여 인수 배열에 액세스 할 수 있습니다. 함수 b에서는 손실됩니다. 내가 시도하는 것처럼 다른 자바 스크립트 함수에 인수를 전달하는 방법이 있습니까?



답변

다음 과 같이 function에서 .apply()동일한 액세스 권한을 갖는 데 사용하십시오 .argumentsb

function a(){
    b.apply(null, arguments);
}
function b(){
   alert(arguments); //arguments[0] = 1, etc
}
a(1,2,3);​

여기서 테스트 할 수 있습니다 .


답변

스프레드 연산자

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 매개 변수


답변

다른 답변이 제공되지 않는다는 설명은 원래 인수 여전히 사용할 수 있지만 arguments객체 의 원래 위치에는 있지 않다는 것입니다 .

arguments목적 함수에 제공된 각각의 실제 파라미터에 대해 하나 개의 요소를 포함한다. 당신이 호출 할 때 a번호 : 세 개의 인수를 공급 1, 2등을, 3. 을 arguments포함 [1, 2, 3]합니다.

function a(args){
    console.log(arguments) // [1, 2, 3]
    b(arguments);
}

b그러나을 호출하면 정확히 하나의 인수 ( a‘s argumentsobject) 를 전달 합니다. 그래서 arguments포함 [[1, 2, 3]]입니다 (즉, 하나의 요소 aarguments원래 인수로를 포함하는 속성이 객체를, 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일반적인 경우에는 올바른 해결책입니다.


답변

이 시도

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


답변