2015-01-14 1 views
6

이 적용 호출을 사용하지 왜 폐쇄는 오류를 제기 않습니다function.apply를 사용할 때 클로저가 매개 변수 유형을 확인하지 않는 이유는 무엇입니까?

/** 
* @param {string} a 
* @param {string} b 
*/ 
var f = function(a, b){ 
    // ... 
} 

/** 
* @param {string} a 
* @param {boolean} c 
*/ 
var h = function(a, c){ 
    f.apply(this, arguments); // no compile error 
    f.apply(this, [a, c]); // no compile error 
    f.call(this, a, c);  // compile error: does not match formal parameter 
} 

아래를 참조하십시오?
클로저 유형을 만들 수있는 방법이 있습니까? 적용을 사용하는 경우에도 매개 변수를 확인 하시겠습니까?

+0

명시 적으로 배열을 입력 할 수 있습니까? – Bergi

+0

@Bergi 그것을 할 방법이 있다면, 나는 그것을 모른다. – oldergod

답변

2

(a) 유형 검사기가 아직 튜플 유형의 개념을 가지고 있지 않으며 (b) 배열 리터럴을 사용하는 메소드를 호출하는 경우는 드뭅니다. 어떤 매개 변수가 어떤 매개 변수 슬롯에 할당되는지를 결정하는 .call을 사용할 때 사소한 것입니다.

유형 시스템이 튜플 유형을 늘리면 .apply를 배열 "슬롯"유형으로 확인하는 데 더 많은 노력을 기울이는 것이 좋으며 길이가 더 쉽게 알 수 있습니다.

관련 문제