I've been using var and $scope.varname and both work fine in AngularJS. I was wondering if there was a difference between the two functionally, and what best practice was in which one to use?
5 Answers
Yes! $scope variables bind to the view where as var does not and is local to the function it was declared in!
var x = 3;
$scope.y = 3;
{{x}} - undefined
{{y}} - 3
7 Comments
var and any variables that need to be open to the front-end should be in $scope?$scope on all my variables. tired of seeing $scope everywhere! Finally decided to see if I need it or if I can just use var. Plus, this will help distinguish in the code which variables effect the view! :DThe technical implications of using var and $scope have been described by @tymeJV and others. I think the next logical question answer is: When do I use either?
TL;DR - if you do not use a variable in a view (e.g. {{myVar}} ), use var.
The reason is two fold:
Encapsulation - hide state that is not necessary to the view. This will prevent unintended modifications of the variable.
Performance (prevent extra digest cycles) - Angular performs "dirty state" checking on variables. Modifying a variable that's not used in the view may cause extra digest cycles unnecessarily. In an application with a couple of
ng-repeats and a bunch of watches, this can have a huge impact.
Comments
1 - $scope, is the glue between your controller and your view/model , when you are defining a variable/function to the $scope of a controller, your whole view , which this controller controls it ! , can see that variable/function . Where a pure variable just works in that controller , not even the view of that controller!
2- Every thing that has been defined to the $scope , is manupulatable from the outside of the controller , throughout the Directives , Services , your html view ... , while a pure variable is NOT;
Comments
$scope bind value to the view and var is the local variable to the application.
scopeis apropertyof thescopethus exposed to thehtml, and localvarsin thecontrollerare not exposed and are their ownobjects.