1

私は John Papa と彼の角度のあるスタイル ガイドの推奨に従っています。ビューで使用できるすべての変数とメソッドをコントローラーの上部に配置し、JavaScript を使用して実行時に変数を持ち上げるというアイデアが気に入っています。巻き上げについては、思ったほどよく理解できていません。次の例では、damumValue 変数宣言が $scope.dumbValue 代入ステートメントの上に持ち上げられることを期待します。

var app = angular.module('plunker', []);
app.controller('MainCtrl', [$scope, $http]);
function MainCtrl($scope,$http)
{
    $scope.dumbValue = dumbValue;
    var dumbValue = 'dumb';
}

しかし、このプランカーでは、そうではないことがわかります。select ng-model の値は初期化されていません。割り当てステートメントを変数宣言の下に移動すると、ng-model が初期化されます。

javascriptが上記の割り当てをホイストしないのはなぜですかvar dumbValue、それとも角度がそれを処理する方法について私が理解できない何かがありますか?

4

2 に答える 2

1

これを行うと...

var app = angular.module('plunker', []);
app.controller('MainCtrl', [$scope, $http]);
function MainCtrl($scope,$http)
{
    $scope.dumbValue = dumbValue;
    var dumbValue = 'dumb';
}

これは実際に起こっていることです。

var app = angular.module('plunker', []);
app.controller('MainCtrl', [$scope, $http]);
function MainCtrl($scope,$http)
{
    var dumbValue = undefined;
    $scope.dumbValue = dumbValue;
    dumbValue = 'dumb';
}

したがって、変数は巻き上げられますが、未定義に設定されます。その後、その値を取得しますが、この場合は遅すぎます。これが、変数の巻き上げが推奨されない理由です。それらを常に一番上に置きます。

于 2014-10-12T03:41:18.927 に答える