Nella maggior parte delle lingue, codice e dati sono cose diverse. Occupano diverse parti della memoria e non interagiscono tra loro.
Quando chiedi al codice "quanto è grande questo" stai chiedendo "quanto è grande l'oggetto istanziato". Osservando questo attraverso strumenti come sizeof.js, stai ponendo la domanda "quanto è grande l'oggetto che rappresenta il puntatore della funzione". E in questo caso, l'oggetto non ha proprietà aggiuntive, la sua dimensione è trascurabile.
Chiedere quanto grande in un linguaggio come javascript che spesso non è compilato troppo in profondità diventa uno di "quanto è grande questo albero di analisi", che non ha alcun significato reale in fase di esecuzione ... né è sempre accessibile .
Alcune lingue come Lisp, dove i dati e il codice possono mescolare un po 'più liberamente (il codice è dati), tale domanda può essere leggermente più significativa, anche se non proprio. Mentre sono sicuro che se avessi combattuto abbastanza a lungo (la mia vibrazione è un po 'arrugginita e non ho mai approfondito il regno della metaprogrammazione chiara), potrei inventare:
(defun double (x) (* x 2))
(print (somefunc 'double))
tale da stampare un valore di 2 o 4 a seconda di come si desidera definirlo. Ma non è un numero significativo nella maggior parte dei casi.
Né è "quanto è grande quella funzione?" domanda posta di un puntatore a funzione javascript. È. E cosa c'è di più, con diversi motori javascript, se potrebbe ottenere un numero, sarebbe probabilmente diverso.
- La domanda che stai facendo a sizeof.js ti restituisce il numero giusto.
- L'oggetto che rappresenta il puntatore della funzione non ha dimensioni apprezzabili associate ad esso.
- Ipoteticamente, potrebbe contenere dati che non erano associati al codice e si otterrebbe un numero diverso.
- Il codice risiede in un punto diverso della memoria rispetto ai dati che sizeof.js potrebbe non avere un modo per accedere.
- La dimensione del codice non è un numero significativo all'interno del runtime.