[Javascript] Portare variabile in una funzione esterna al suo scope

ken_korn

Nuovo Utente
27 Apr 2017
14
2
3
Chiedo perdono per il titolo ermetico ed eventualmente per l'errata terminologia, provvederò al più presto a modificarlo appena avrò capito il problema.
Non avendo ben capito nè come fare, nè precisamente di quale aspetto di Javascript si tratta (se di scope, se di this o altro), posto direttamente il mio codice:
Codice:
function Log(x){
    console.log(x);
};

function a(){
    
    var p = 5;
    Log.call(p);
    
};

a();
Vorrei portare la variabile "p" nella callback Log().
Oltre a un semplice codice funzionante mi piacerebbe capire anche il suo funzionamento.
Ringrazio in anticipo chi avrà la pazienza di aiutarmi.
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Oltre a un semplice codice funzionante mi piacerebbe capire anche il suo funzionamento.
Ciao, mi scuso in anticipo ma mi preme fare una piccola premessa prima di darti qualche risposta tecnica: la tua richiesta non è inquadrabile solo da un punto di vista tecnico/pratico (cioè non parliamo di un qualche problema tecnico sul tuo script) ma, secondo quanto hai scritto qui, è chiaro che ti mancano diverse basi riguardo la programmazione JavaScript che sono più che altro teoriche e, in genere, apprendibili con lo studio di guide, manuali, tutorial, ecc. Pertanto è difficile trattare l'argomento in oggetto senza rischiare di cadere in una relazione di tipo tutor-allievo (situazione da evitare in un forum pubblico come questo).

Per chiudere con la premessa, senza alcuna offesa ma giusto per chiarire, in altri contesti simili avresti potuto ricevere una semplice risposta del tipo "RTFM"; fondamentalmente ciò che ti ha risposto marino51 (che quoto), anche se lui è stato comunque più educato e clemente nel proporti da quale parte iniziare a leggere.

Venendo alla parte tecnica (cerco di essere il più sintetico possibile):

- Il termine callback non è adatto in questo specifico caso (vedi guida). La tua è meglio definirla semplicemente "funzione".

Vorrei portare la variabile "p" nella callback Log().
- per passare un qualsivoglia "dato" ad una qualsiasi funzione, basta passarlo come parametro richiamando la funzione stessa secondo la semplice sintassi tuaFunzione(datoDaPassare); (vedi guida)
Nel tuo caso dovresti avere una cosa del tipo:
Codice:
function a(){
   var p = 5;
   Log(p);
};
Occhio però, in questo caso tu stai sostanzialmente passando il valore della variabile p, non il suo "riferimento". Cioè la variabile p non sarà comunque "visibile" dentro la funzione Log() ma il suo valore (secondo il tuo esempio) verrà passato alla variabile x, che è un argomento della funzione Log() e sarà quindi una variabile locale dentro tale funzione. Se invece vuoi che p sia visibile dentro la funzione Log(), e quindi direttamente accessibile dentro questa, potresti definire p in modo globale (vedi guida proposta da marino51).

- L'uso del metodo call() non ha alcun senso in questo caso, non capisco perché tu lo stia usando (vedi guida).
Se il tuo intento è quello di capire come funziona, e in quali contesti usare tale metodo, spero che le guide proposte ti aiutino in qualche modo ad appianare qualche carenza. Ad ogni modo, se trovi realmente difficoltà pratiche, sarebbe opportuno riformulare la richiesta in modo più specifico, magari definendo meglio il contesto di utilizzo e l'obiettivo che vorresti raggiungere.

Buon proseguimento.