ho specificato una funzione in mio controller come questo:IIFE in AngularJS
$scope.myFunction = function(){ console.log('test'); }
voglio questa funzione per essere attivato quando un selectbox è stato modificato. Perciò io applico ng-cambiamento sull'elemento selezionare in questo modo:
<select ng-options="..." ng-model="..." ng-change="myFunction();"></select>
Ma voglio anche la funzione myFunction per essere attivato quando la mia pagina viene caricata. Così ho pensato di trasformare la mia funzione in un IIFE:
($scope.myFunction = function(){ console.log('test'); }());
Tuttavia, ora la funzione viene attivata solo su pageload e non da NG-cambiamento. Ho notato che quando cambio la parentesi, la funzione anche viene innescato da NG-cambiamento:
($scope.myFunction = function(){ console.log('test'); })();
qualcuno può spiegare perché questo anche le questioni?
Grazie mille!
che la prima chiamata non è un IIFE, la seconda è. – helpermethod
@helpermethod in base a questo articolo http://benalman.com/news/2010/11/immediately-invoked-function-expression/, entrambe le versioni sono IIFE, con lievi differenze 'Tali paren indicano che l'espressione della funzione essere immediatamente invocato e la variabile conterrà il risultato della funzione, non la funzione stessa. Questo può salvare qualcuno che legge il tuo codice il problema di dover scorrere verso il basso in fondo a quella che potrebbe essere un'espressione di funzione molto lunga per vedere se è stata invocata o meno. – Alex