Función de scope angular ejecutada varias veces

He definido una función en el scope. Y cuando lo llamo desde la vista dentro {{}} ejecuta X número de veces.

Controlador

function testCtrl($scope) { $scope.myFunc = function(name) { return "Hello " + name; } } 

HTML

 
{{myFunc('Joe')}}

Puedes verlo en este ejemplo: http://jsfiddle.net/rbRvD/2/

O con Plunker: http://plnkr.co/edit/LLQ7cKs2fEoBwv0C5XPE

Supongo que esto se hace de forma incorrecta, pero ¿por qué se ejecuta tantas veces?

Su función se ejecuta 10 veces. ¿Por qué 10? ¿Por qué no 100?

La respuesta está en los documentos :

El oyente puede cambiar el modelo, lo que puede provocar que otros oyentes disparen. Esto se logra volviendo a ejecutar los vigilantes hasta que no se detecten cambios. El límite de iteración de repetición es 10 para evitar un interlocking de bucle infinito.

Cuando ve que esto sucede, significa que está cambiando el modelo de tal manera que Angular tiene que volver a ejecutar el resumen y disparar los relojes de nuevo. En su caso particular, está llamando a una función que actualiza un contador, que se muestra en la página. Cuando el valor del contador cambia, ejecuta nuevamente el resumen, que llama a la función que actualiza el contador, etc., etc.

Angular espera que usted (y de hecho lo aliente) para cambiar el modelo y dejar que la vista responda a esos cambios, en lugar de al revés.

Este es el comportamiento esperado. Las expresiones angulares ( {{expression}} ) se vuelven a evaluar en cada ciclo de $ digest (a veces varias veces por ciclo). Esto significa que las expresiones deben permanecer livianas en términos computacionales.

En ese caso, la evaluación de la expresión no debe dar como resultado una llamada AJAX u otra operación intensiva o asincrónica, o si es necesario, de lo que debe almacenar en caché los resultados.

AngularJs no sugiere que cambie el modelo de scope en la representación. Si desea cambiar el modelo de su scope, hágalo en Controlador o Directiva.

Considere la vista como un lugar para mostrar datos (valores de scope en este caso) solamente, toda la modificación de los datos debe ser en Controlador o Directiva.