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
//Nem megy
var a=8;
var b=require('./b.js').b;
b();

//Megy
var a=8;
var b=function()
{
	console.log(a);
};
b();
A b.js tartalma
var b=function()
{
	console.log(a);
}
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:

function require(w) {
    var exports = {};
    w(exports);
    return exports;
}
function bjs(exports) {
    function b(a) {
        console.log(a);
    }
    exports.b = b;
}
function ajs(exports) {
    var a, b;
    a = 1;
    b = require(bjs).b;
    b();
}

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.