2016-06-10 2 views
0

Я много читал о передаче массива в качестве параметра функции для разных возвращаемых значений. Но это не работает, если у меня есть три файла js.JavaScript: Как обрабатывать массив как параметр функции?

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); 
} 

У вас есть идея, почему доставить не определен?

@Jose, спасибо. Да, это весь код. Если все в одном файле, это сработает. Но не в трех файлах ...

@Quentin, спасибо. У вас есть идея, как я могу заставить его работать с тремя файлами? -> Я пытаюсь передать аутсорсинг задачи из файла2 в файл1, потому что мне это понадобится и для других задач. В конце мне нужен результат file1 в файле2 для работы с ним. В моем примере я опустил аутсорсинг.

Спасибо за подсказку, Qentin. Я обновил код выше. deliver (x) содержит теперь параметр, который я хотел бы вернуться в file2.js. Он уже поступает в файл1, но не возвращается.

Я все еще пытаюсь найти решение. Я понял, как передавать данные из файла2 в файл1 (или наоборот).

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); 
    } 
} 

я могу начать file2 и передавать данные в file1, если «вернуться file2.receive (id, 'content 1'); исчезает. Я также могу начать с file1 и передавать данные в файл2 до тех пор, пока «file1.deliver (« да »); исчезает. Почему бы не работать одновременно?

+1

Это весь код для file2.js? –

+0

«Кстати, следующее тоже не работает» - Конечно, нет. 'Доставка' по-прежнему выходит за рамки. – Quentin

+0

Да, моя вина. Мои навыки кодирования медленны, даже в понимании ваших очков. – NewbieXXL

ответ

3

Переменные в модулях локально ограничены, а декларации функций, объявленные внутри других функций, ограничены этими функциями.

this.file1 присваивается экспортированная функция от file1.js. Функция deliverтолько доступный внутри эта функция.

Более того, file2.js не имеет доступа ни к чему в file1.js, потому что

  • ни один из них не требуют другого и
  • ничего от одного из них передается (в качестве аргумента) на другую ничего, что у них есть доступ к обоим из них

содержимое file2.js не имеют доступа к deliver, потому что в ком полностью разный объем.

Вам понадобится серьезная ревизия кода, чтобы сделать его доступным. Я даже не знаю, с чего начать, потому что ваш код настолько абстрактный, что невозможно сказать, что он пытается сделать.

Смежные вопросы