Função de escopo angular executada várias vezes

Eu defini uma function no escopo. E quando eu o chamo da visão dentro de {{}}, ele executa um número X de vezes.

Controlador

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

HTML

 
{{myFunc('Joe')}}

Você pode ver neste exemplo: http://jsfiddle.net/rbRvD/2/

Ou com o Plunker: http://plnkr.co/edit/LLQ7cKs2fEoBwv0C5XPE

Eu acho que isso é feito da maneira errada, mas por que é executado tantas vezes?

Sua function é executada 10 vezes. Por que 10? Por que não 100?

A resposta está nos documentos :

O ouvinte de exibição pode alterar o modelo, o que pode acionar outros ouvintes para triggersr. Isso é obtido executando novamente os observadores até que nenhuma alteração seja detectada. O limite de iteração de reexecução é 10 para evitar um impasse de loop infinito.

Quando você vê isso acontecendo, isso significa que você está mudando o modelo de forma que Angular tenha que reexecutar o resumo e triggersr os relógios novamente. Em seu caso particular, você está chamando uma function que atualiza um contador, que é exibido na página. Quando o valor do contador é alterado, ele executa o resumo novamente, que chama a function que atualiza o contador, etc, etc.

Angular espera que você (e de fato incentiva você) altere o modelo e deixe a visão responder a essas mudanças, e não o contrário.

Esse é o comportamento esperado. Expressões angulares ( {{expression}} ) são reavaliadas em cada loop $ digest (às vezes várias vezes por loop). Isso significa que as expressões devem permanecer leves em termos computacionais.

Aliás, a avaliação da expressão não deve resultar em uma chamada AJAX ou em alguma outra operação intensiva ou assíncrona, ou se for necessário, do que você deve armazenar em cache os resultados.

AngularJs não sugere que você mude o modelo do escopo na renderização. Se você quiser alterar o modelo do seu escopo, faça-o em Controlador ou Diretiva.

Pense de vista como um lugar para exibir dados (valores de escopo, neste caso) apenas, toda a modificação dos dados deve estar em Controlador ou Diretiva.