Newer Version Available
Modifying Components Outside the Framework Lifecycle
You don't need to use $A.getCallback() if your code is executed as part of the framework's call stack; for example, your code is handling an event or in the callback for a server-side controller action. An exception is when you want to pass the callback to Lightning Data Service, such as when you are creating a record using force:recordData. If the callback is passed in without being wrapped in $A.getCallback(), any attempt to access private attributes of your component results in access check failures.
An example of where you need to use $A.getCallback() is calling window.setTimeout() in an event handler to execute some logic after a time delay. This puts your code outside the framework's call stack.
This sample sets the visible attribute on a component to true after a five-second delay.
1window.setTimeout(
2 $A.getCallback(function() {
3 cmp.set("v.visible", true);
4 }), 5000
5);Note how the code updating a component attribute is wrapped in $A.getCallback(), which ensures that the framework rerenders the modified component.