2016-06-29 5 views
0

我々はコントローラ側でAngularJSでフィルタを使用したい場合は、我々はこのこのAngularJSフィルタ式はどのjavascript構造ですか?

$filter('filter')(array, expression, comparator, anyPropertyKey) 

を使用し、私はjavascriptの構築物は、この使用しているかを理解することはできません。つまり、関数ではなく、代入式ではなく、自己実行関数ではありません。それは何ですか ?

答えて

2

実行する関数を返す関数です。

function foo() { 
    return function bar() {}; 
} 

foo()(); 

// equivalent to: 
var b = foo(); 
b(); 
1

関数を返す関数です。 ソースコードは

function filterFilter() { 
    return function(array, expression, comparator, anyPropertyKey) { 
    if (!isArrayLike(array)) { 
     if (array == null) { 
     return array; 
     } else { 
     throw minErr('filter')('notarray', 'Expected array but received: {0}', array); 
     } 
    } 

    anyPropertyKey = anyPropertyKey || '$'; 
    var expressionType = getTypeForFilter(expression); 
    var predicateFn; 
    var matchAgainstAnyProp; 

    switch (expressionType) { 
     case 'function': 
     predicateFn = expression; 
     break; 
     case 'boolean': 
     case 'null': 
     case 'number': 
     case 'string': 
     matchAgainstAnyProp = true; 
     //jshint -W086 
     case 'object': 
     //jshint +W086 
     predicateFn = createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp); 
     break; 
     default: 
     return array; 
    } 

    return Array.prototype.filter.call(array, predicateFn); 
    }; 
} 
です
関連する問題