2016-09-02 3 views
3

私はAngularの新機能ですが、アプリケーションでデバッグした最近の問題は次のようになりました:角モジュール関数:var?

他の.jsファイルに定義されている既存のモジュールに新しいディレクティブを追加しています。私は、次の構文を使用する場合:

angular 
.module('myApp') 
.directive('ratingStars', ratingStars) 
; 

var ratingStars = function(){ 
    return { 
    restrict: 'EA', 
    scope: {thisRating : '=rating'}, 
    templateUrl: '/my.template.html' 
    }; 
}; 

を私はの線に沿って、エラーになるだろう「引数 『FN』関数ではありません、未定義しまいました」。

しかし、以下のコードを使ってコードを修正することができます(varに代入するのではなく関数を直接使用することに注意してください)。

angular 
.module('myApp') 
.directive('ratingStars', ratingStars) 
; 

function ratingStars(){ 
    return { 
    restrict: 'EA', 
    scope: {thisRating : '=rating'}, 
    templateUrl: '/my.template.html' 
    }; 
} 

私の機能を取り、VARに割り当てるのではなく、完全に関数を定義間の論理的な違いは何ですか? いろいろな種類の昇降がありますか?私のvarは、その1つのファイルのローカルですか?

ありがとうございました。

答えて

5

top hoistingと関連しています。

関数を明示的に定義するのではなく、関数を使ってvarに代入することとの論理的な違いは何ですか?最初のスクリプトで

次のように、

あなたのスクリプトが解釈されます。

var ratingStars; 

angular 
    .module('myApp') 
    .directive('ratingStars', ratingStars); 

ratingStars = function() { 
    return { 
     restrict: 'EA', 
     scope: { thisRating: '=rating' }, 
     templateUrl: '/my.template.html' 
    }; 
}; 

JavaScriptで変数がvarを使用して、トップblock scopeまたはグローバルスコープの関数スコープで掲揚された宣言のでだから、あなたが見ることができる、var ratingStarsdeclared first and assigned it to the directive definition .Itsです。 But actual definition will occur after that。 2番目のスクリプトで

あなたfunction definition、グローバルコードの先頭で定義されます。 これは正しく解釈されています。だから、

、最初のものはvariable getting top hoisted

が、not actual function definition 2つ目はfunction defination itself getting top hoisted

+0

それはdown-voted.?Pleaseコメントを追加さ​​れたのはなぜfunction defination

を使用していますfunction expressionを使用しました –

関連する問題