2014-09-21 3 views
0

Je suis intrigué par un comportement de node.js, qui est différent dans Google Console.Cette liaison dans node.js

est ici un simple code

var t = "GLOBAL"; 
var objet = { 
    t : "LOCAL1", 
    test : function() { 
    console.log(this.t,t); 
    } 
}; 
var objet2 = { 
    t : "LOCAL2", 
    test : objet.test 
}; 
var test = objet.test; 
objet.test(); 
objet2.test(); 
test(); 

Ce code yiels résultat différent.

En Node.js, j'ai ces résultats:

LOCAL1 GLOBAL 
LOCAL2 GLOBAL 
undefined 'GLOBAL' 

Dans la console chrome:

LOCAL1 GLOBAL 
LOCAL2 GLOBAL 
GLOBAL GLOBAL 

Je pensais que d'appeler directement la fonction binded à test.t, ce serait à binded la portée globale, c'est le cas en chrome, mais noeud dans node.js.

Notez que si je supprime le var dans la première ligne, la version node.js donne le même résultat.

Alors qu'est-ce qui se passe? Il semble qu'il y ait une portée dans node.js qui me manque? Est-ce que quelqu'un a une idée?

+0

Ce n'est pas un problème sur la portée en javascript, vous appelez une fonction de portée globale et "T" ne se termine pas sur la portée globale. – BlaShadow

Répondre

1

Dans NodeJS, la portée par défaut est celle du module. La portée globale est encore plus grande que le module, ce à quoi se réfère this. Dans Chrome, la portée globale est window, qui correspond à this. Voir la documentation module et, plus important, globals.

+0

Merci pour votre réponse claire. Semble évident maintenant :) –

+0

Juste comme un ajout: node.js wraps '(fonction (exportations, require, module, __filename, __dirname) {/ * la source du fichier * /});' autour de la source lors de l'inclusion. Donc 'var' est dans la portée de cette fonction anonyme. –

+0

@ t.niese Est-ce que Node lui-même le fait, ou est-ce juste comme cela est compilé pour browserify? – Scimonster

Questions connexes