Considera questa funzione javascript:
function(){
var someArr = [...];
var someObj = {...};
someArr.forEach(function(item){
if (matchItem(item)){
someObj.callMethod(item.someProp);
}
});
}
Supponendo che il codice dato funzioni correttamente, diamo un'occhiata al suo design. Come puoi notare, someArr.forEach
riceve una funzione di callback. Nel frattempo, l'oggetto someObj
appartiene all'ambito di tale callback. Quindi dall'interno della funzione di callback possiamo manipolare someObj
.
I.e., in questo caso il callback produce effetti collaterali.
Potremmo anche associare someObj
a this
oggetto del callback:
function(){
var someArr = [...];
var someObj = {...};
someArr.forEach(
function(item){
if (matchItem(item)){
this.callMethod(item.someProp);
}
},
someObj
);
}
Ancora una volta, stiamo producendo alcuni effetti collaterali qui, anche se in modo più esplicito. In generale, questo approccio non può essere considerato funzionale, in quanto viola il principio di assenza di effetti collaterali.
Come dovremmo progettare il codice in tali situazioni? In che modo è più robusto? Quali sono le migliori pratiche?
Grazie!