2017-10-09 5 views
0

함수의 인수 객체가 어떻게 파싱되는지 이해하는 데 문제가 있습니다.자바 스크립트 인수 객체 매개 변수 구문 분석

코드 내가 분석 해요 : 인수해야

function foo(something) { 
    console.log(something); // outputs 3 
    return this.a + something; 
} 

function bind(fn, obj) { 
    return function() { 
     return fn.apply(obj, arguments); 
    }; 
} 

var obj = { 
    a: 2 
}; 

var bar = bind(foo, obj); 
var b = bar(3, 5, 6); 

함수 foo는 콘솔이 "뭔가"라는 이름의 인수를 기록는, 객체. 왜 처음 매개 변수가 전달되고 다른 매개 변수는 무시됩니까? 나는 전체 인수 객체를 가져야한다고 생각했습니다.

답변

0

.apply()를 사용하면 모든 매개 변수를 배열로 전달합니다. 지금 2 개 이상의 필드 배열을 전달하는 경우

[1,3] 

:

functionWithTwo(a,b) {} 

두 개의 값으로 배열을 매개 변수를 전달할 수 있습니다 : 당신이 같은 두 개의 매개 변수와 함수를 가지고있을 때, 의미 , 다른 함수는 무시됩니다. 타겟 함수는 단지 2 개의 인수를 받아들이 기 때문입니다.

이것은 실제로 귀하의 예에서 일어나는 일입니다. 배열 [3, 5, 6]을 매개 변수 하나만 넘기는 함수에 전달합니다 (something). 따라서 첫 번째 값인 3이 표시됩니다.

+0

배열을 전달하는 중입니다. (그런데 인수 매개 변수 유형은 object입니다.) [3, 5, 6] 그리고 첫 번째 요소를 가져 오는 중입니다. 왜 그렇게? 나를 위해 그것은 인자가 잘못 출력되는 함수를 가지고있는 것처럼 보입니다. 예 : 'function test (arg) { console.log (arg); } test ([1,2,3]) // [1,2,3]' 을 출력하지만 다음과 같이 표시됩니다. 'test ([1,2,3]) // [1]' – tawreon

+0

.apply()는 주어진 배열을 함수 인수에 매핑합니다. 주어진 배열의 모든 요소를 ​​루프하여 모든 매치를 매핑합니다. foo가 오직 하나의 매개 변수를 가지고 있기 때문에 당신은 인자 [0]에 대한 일치를 가지고 있습니다. – scipper