2015-01-14 9 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を調べることに多くの努力を払うと意味があります。

関連する問題