Questi non sono puntatori di funzione (e non ci sono puntatori in JS in modo nativo). Le funzioni in JS possono essere anonime e sono oggetti di prima classe. Quindi
function() { alert("A"); }
crea una funzione anonima che avvisa "A" in fase di esecuzione;
var bar = function() { alert("A"); };
assegnare tale funzione a bar;
var foo = bar;
assegnare foo a bar, che è la funzione "A".
bar = function() { alert("B"); };
rebindare la barra ad una funzione anonima "B". Ciò non influirà su foo o sull'altra funzione "A".
foo();
Chiamare la funzione memorizzata in foo, che è la funzione "A".
In realtà nelle lingue in cui sono presenti punti funzione, ad es. C non interesserà neanche foo
. Non so dove ti venga l'idea di ottenere la "B" sulla riassegnazione.
void A(void) { printf("A\n"); }
void B(void) { printf("B\n"); }
typedef void(*fptr_t)(void);
fptr_t foo = A;
fptr_t bar = foo;
bar = B;
foo(); // should print "A"
perché è una copia del valore passato quando le funzioni non sono tipi primitivi? – thed0ctor
Non importa, questa risposta è la seguente: http://stackoverflow.com/a/11598151/1316465 – thed0ctor
Giusto per chiarire l'ultima frase di questa risposta, ricorda che il 'valore di bar' è un 'puntatore alla funzione', non la funzione stessa. Quindi, dopo 'foo = bar', foo riceve un valore di copia di quel puntatore, quindi sia foo che bar puntano all'oggetto funzione standalone. – drodsou