ugrás a tartalomhoz

Node.js modul

MadBence · 2012. Május. 5. (Szo), 18.04
Adott a.js fájl, ebben vannak definiálva lokális változók.
Adott egy másik b.js fájl, ebben definiálva van egy függvény, ami az a.js fájl változóival dolgozna.
Ha a b.js be van másolva az a.js-be, akkor gond nélkül megy, de így referenceerrort kapok, és nem értem miért. Valahogy rá szeretném bírni a működésre.

Az a.js tartalma
  1. //Nem megy  
  2. var a=8;  
  3. var b=require('./b.js').b;  
  4. b();  
  5.   
  6. //Megy  
  7. var a=8;  
  8. var b=function()  
  9. {  
  10.     console.log(a);  
  11. };  
  12. b();  
A b.js tartalma
  1. var b=function()  
  2. {  
  3.     console.log(a);  
  4. }  
  5. exports.b=b;  
 
2

Mert a b.js-ben nincs

Ajnasz · 2012. Május. 5. (Szo), 19.51
Mert a b.js-ben nincs definialva sehol sem "a" valtozo. A require nem ugy mukodik, mint php-ban az include. A b-jsnek fogalma sincs arrol, hogy mi van a.js-ben.
Kepzeld el ugy, mintha valami ilyesmi lenne:
  1. function require(w) {  
  2.     var exports = {};  
  3.     w(exports);  
  4.     return exports;  
  5. }  
  6. function bjs(exports) {  
  7.     function b(a) {  
  8.         console.log(a);  
  9.     }  
  10.     exports.b = b;  
  11. }  
  12. function ajs(exports) {  
  13.     var a, b;  
  14.     a = 1;  
  15.     b = require(bjs).b;  
  16.     b();  
  17. }  
  18.   
  19. ajs();  
Itt ugye nagyon jol latszik, hogy ajs es bjs kulon scope-ot definial.
Viszont fuggvenynek kivaloan at lehet adni "a" erteket.
3

Köszi

MadBence · 2012. Május. 5. (Szo), 21.34
Végre kicsit megvilágosodtam require terén. Valahogy éreztem, hogy nem lesz olyan könnyű dolgom, mint gondoltam :D
1

Lokális

Poetro · 2012. Május. 5. (Szo), 19.48
Ha lokálisnak deklarálod a változókat, akkor azok csak abban a modulban lesznek elérhetők, és ez így van jól. Ne szennyezzük a globális névteret, ha lehet. Természetesen van lehetőség globális változók létrehozására is Node.js alatt, például úgy, hogy nem var kulcsszóval hozod létre a változót.