2015-09-24 13 views
5

Secondo this explanation in MDN:`this` nel contesto globale e funzione all'interno

  • nel contesto globale, this riferisce all'oggetto globale
  • nell'ambito funzione, se la funzione è chiamata direttamente, nuovamente fa riferimento all'oggetto globale

Tuttavia, il seguente:

var globalThis = this; 
function a() { 
    console.log(typeof this); 
    console.log(typeof globalThis); 
    console.log('is this the global object? '+(globalThis===this)); 
} 

a(); 

... posto in file di foo.js produce:

$ nodejs foo.js 
object 
object 
is this the global object? false 
+0

Prova ad aggiungere 'console.log (questo); console.log (globalThis); 'per vedere cosa sono in realtà – mplungjan

risposta

5

In Node.js, qualunque sia il codice che scriviamo in un modulo sarà avvolto in una funzione. Puoi leggere di più su questo, in questo detailed answer. Quindi, this al livello più alto del modulo si riferirà al contesto di quella funzione, non all'oggetto globale.

si può effettivamente utilizzare global object, per fare riferimento all'oggetto globale attuale, come questo

function a() { 
    console.log('is this the global object? ' + (global === this)); 
} 

a(); 
+0

Dato che' a' è chiamato all'interno del modulo, tuttavia, non dovrebbe essere lo stesso dentro e fuori la funzione? –

+0

@JamesThorpe 'a' viene chiamato senza alcun oggetto di contesto (' questo'). Quindi, per impostazione predefinita "this" farà riferimento solo all'oggetto globale. – thefourtheye

Problemi correlati