2016-06-10 16 views
0

Ich habe viel darüber gelesen, wie man ein Array als Funktionsparameter für verschiedene Rückgabewerte übergeben kann. Aber es funktioniert nicht, wenn ich drei js-Datei habe.JavaScript: Wie behandelt man ein Array als Funktionsparameter?

main.js

module.exports = function(){ 
     this.deliver = require('./file1.js'); 
     this.start = require('./file2.js'); 
} 

file1.js

module.exports = function(id){ 
    require('./main.js')(); 

    function deliver(id){ 
    console.log('Does deliver() work?:'+id); 
    var arr = new Array(2); 
    arr[0] = 'content 1'; 
    arr[1] = 'content 2'; 
    return arr; 
    } 
} 

file2.js

require('./main.js')(); 

start.apply(null, deliver('yes')); 

function start(x, y){ 
    console.log('x: '+x); 
    console.log('y: '+y); 
} 

Haben Sie eine Idee haben, warum ist definiert deliver nicht?

@Jose, danke. Ja, das ist der ganze Code. Wenn alles in einer Datei ist, funktioniert es. Aber nicht in drei Dateien ...

@Quentin, danke. Hast du eine Idee wie ich es mit drei Dateien machen könnte? -> Ich versuche eine Aufgabe von Datei2 nach Datei1 auszulagern, weil ich sie auch für andere Aufgaben brauche. Am Ende brauche ich das Ergebnis von Datei1 zurück in Datei2, um damit zu arbeiten. In meinem Beispiel habe ich das Outsourcing weggelassen.

Danke für Ihren Hinweis, Qentin. Ich habe den obigen Code aktualisiert. deliver (x) enthält jetzt einen Parameter, den ich gerne wieder in file2.js bekommen würde. Es kommt bereits Datei1 an, kommt aber nicht zurück.

Ich bin immer noch auf der Suche nach einer Lösung. Ich habe verstanden, wie man Daten von Datei2 zu Datei1 übergibt (oder umgekehrt).

main.js

module.exports = function(){ 
     this.file1 = require('./file1.js'); 
     this.file2 = require('./file2.js'); 
} 

file1.js

require('./main.js')(); 

//file2.receive('yes', 'content 1'); 


module.exports = { 

    deliver : function(id){ 
    console.log('Does deliver() work?:'+id); 
    return file2.receive(id, 'content 1'); 
    } 
} 

file2.js

require('./main.js')(); 

file1.deliver('yes'); 


module.exports = { 

    receive : function(x, y){ 
    console.log('x: '+x); 
    console.log('y: '+y); 
    } 
} 

I file2 beginnen und Daten übergeben Datei1 wenn „file2.receive zurückkehren (ID, 'Inhalt 1'); " ist ausgeblendet. Ich kann auch mit file1 beginnen und Daten an file2 übergeben, solange "file1deliver ('yes');" ist ausgeblendet. Warum arbeiten Sie nicht beide gleichzeitig?

+1

Ist das der ganze Code für file2.js? –

+0

"BTW, das folgende funktioniert auch nicht" - Natürlich nicht. 'deliver' ist immer noch außerhalb des Geltungsbereichs. – Quentin

+0

Ja, meine Schuld. Meine Programmierkenntnisse sind langsam, selbst beim Verständnis Ihrer Punkte. – NewbieXXL

Antwort

3

Variablen in Modulen sind lokal begrenzt und Funktionsdeklarationen, die in anderen Funktionen deklariert sind, sind auf diese Funktionen beschränkt.

this.file1 wird die exportierte Funktion von file1.js zugewiesen. Die deliver Funktion ist nur innerhalb dieser Funktion zugänglich.

Was mehr ist, hat file2.js keinen Zugang zu irgendetwas in file1.js weil

  • von ihnen weder erfordern die anderen und
  • nichts von einer von ihnen übergeben wird (als Argument) zum anderen durch alles, was sie beide Zugriff auf

der Inhalt file2.js hat keinen Zugang zu deliver, weil es in einem com ist völlig anderer Umfang.

Sie benötigen eine größere Überarbeitung des Codes, um sie zugänglich zu machen. Ich bin mir nicht einmal sicher, wo ich anfangen soll, denn der Code ist so abstrakt, dass man unmöglich sagen kann, was er versucht.

Verwandte Themen