2016-10-20 4 views

Antwort

1

Nur um zu klären. Dies ist spezifisch für node.js

Erstellen eines Moduls in Knoten ist es wie Sie es in einer Funktion wie die unten verpacken. Eigentlich ist dies mehr oder weniger der Knoten.

function (exports, require, module, __filename, __dirname) { 

} 

Also, die Exporte Variable tatsächlich ein Verweis auf die module.exports ist und so können Sie zwei Variablen auf das gleiche Objekt zeigen. Die Exporte und die Module.exports verweisen auf dieselbe Stelle im Speicher. Sie müssen ein wenig vorsichtig mit der Verwendung von Exporten sein, da es einige 'dunkle' Teile gibt, die mit den Javascript-Objekten verbunden sind, und es gibt einige Muster, die brechen können. Hier ein Beispiel:

dependency_exports.js

exports = function() { 
    console.log('dependency'); 
} 
// Place console.log to see the contents of the exports and module.exports 
console.log(exports); 
console.log(module.exports); 

app.js

var dependency = require('./dependency_exports'); 
dependency(); 

Warum die beiden console.logs innerhalb der dependency_exports.js Datei drucken verschiedene Objekte, wenn Sie zeigen auf die gleiche Erinnerung? Denken Sie daran, dass es eine Referenz zu module.exports exportiert. Wenn wir dieser Variablen einen anderen Wert zuweisen (Export), wird der Verweis aufgehoben und ein neuer Speicherbereich erstellt. Es aktualisiert nicht die Referenz innerhalb der Module.exports.

So, jetzt, wenn wir versuchen, so etwas zu tun:

dependency(); 

Wir werden ein Fehler sehen kommen zurück, weil dieser Ausgabe.

Verwandte Themen