Nel mondo javaScript semplice ho imparato che le funzioni annidate possono essere problematiche perché la funzione interna viene "ricreata" ogni volta che viene chiamata la funzione esterna:
function outer(a) {
function inner(arg1,arg2){
return arg1 + arg2;
}
return inner(a, 6);
}
myVar = outer(4);
Apparentemente la funzione interna è spazzatura e la costante ri-creazione di essa ha un costo sulle prestazioni. Questo potrebbe essere rielaborato come:
function inner(arg1, arg2) {
return arg1 + arg2;
}
function outer(a) {
return inner(a, 6);
}
myVar = outer(4);
Se ho ragione, sembra che il compromesso risieda nel mutevole ambito dell'intimo; il fatto che la funzione interiore non ha più accesso alle proprie variabili esterne. Se sono corretto finora, passiamo a Node.JS. Il nodo è pesante sui callback e la mia domanda è: le funzioni di callback asincrone tipiche del nodo vengono anche "ricreate" ogni volta che vengono attivate? Prendi il seguente costrutto del nodo comune:
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
In realtà la funzione può diventare piuttosto grande; può comprendere molte funzionalità. La richiamata sopra è "ricreata" ogni volta che un client OTTIENE o POST il server? In tal caso, sarebbe meglio disaccoppiare sempre i callback come nell'esempio javaScript normale:
function handleGET(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}
http.createServer(handleGET).listen(1337, '127.0.0.1');
come domanda bonus correlata, anche le funzioni degli eventi vengono ricreate? Trarrebbero beneficio dalla dichiarazione precedente?
myObj.on('someEvent', function someFunction() {...});
vs.
function someFunction() {...}
myObj.on('someEvent', someFunction);