¿Por qué angularjs invocará la función `nombre ()` dos veces?

El código es simple:

    AngularJS Plunker document.write("");     Hello {{name()}}!    var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.name= function() { console.log("---name---:" + new Date()); return "Freewind"; }; });  

Puede ver que hay una función de name y la invocamos en el cuerpo solo una vez. Pero en la consola, imprime dos veces ---name---: :

 ---name---:Wed Feb 20 2013 14:38:12 GMT+0800 (中国标准时间) ---name---:Wed Feb 20 2013 14:38:12 GMT+0800 (中国标准时间) 

Puede ver una demostración en vivo aquí: http://plnkr.co/edit/tb8RpnBJZaJ73V73QISC?p=preview

¿Por qué el name() la función name() ha sido invocado dos veces?

En AngularJS, cualquier cosa envuelta en llaves dobles es una expresión que se evalúa al menos una vez durante el ciclo de resumen.

AngularJS funciona ejecutando el ciclo de resumen continuamente hasta que nada ha cambiado. Así es como garantiza que la vista esté actualizada. Como llamó a una función, la ejecuta una vez para obtener un valor y luego una segunda vez para ver que nada ha cambiado. En el siguiente ciclo de resumen, se ejecutará al menos una vez más.

En general, es una buena idea llamar solo a los métodos idempotentes (como el name ) de la plantilla por esta misma razón.