【问题标题】:JavaScript: How to handle an array as function parameter?JavaScript:如何将数组作为函数参数处理?
【发布时间】:2016-06-10 14:51:32
【问题描述】:

我已经阅读了很多关于将数组作为函数参数传递给不同返回值的内容。但如果我有三个 js 文件,它就不起作用。

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,谢谢。你知道我如何使它与三个文件一起工作吗? --> 我尝试将一个任务从 file2 外包到 file1,因为其他任务也需要它。最后,我需要将 file1 的结果返回到 file2 才能使用它。在我的示例中,我省略了外包。

感谢您的提示,Qentin。我已经更新了上面的代码。 deliver(x) 现在包含一个参数,我想回到 file2.js 中。它已经到达 file1 但没有回来。

我仍在努力寻找解决方案。我已经了解如何将数据从 file2 传递到 file1(反之亦然)。

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

如果“return file2.receive(id, 'content 1');”,我可以启动 file2 并将数据传递给 file1淡出。我也可以从 file1 开始并将数据传递给 file2,只要“file1.deliver('yes');”淡出。为什么不同时工作?

【问题讨论】:

  • 这就是 file2.js 的全部代码吗?
  • “顺便说一句,下面的也行不通”——当然不行。 deliver 仍然超出范围。
  • 是的,我的错。我的编码能力很慢,即使在理解你的观点方面也是如此。

标签: javascript node.js


【解决方案1】:

模块中的变量是局部作用域的,而在其他函数中声明的函数声明的作用域是这些函数。

this.file1 被分配了从file1.js 导出的函数。 deliver 函数只能在该函数内部访问

更重要的是,file2.js 无法访问file1.js 中的任何内容,因为

  • 它们都不需要另一个
  • 任何可以访问它们的任何东西都不会将它们中的任何一个传递(作为参数)给另一个

file2.js 的内容无法访问deliver,因为它处于完全不同的范围内。

您需要对代码进行重大修订才能使其易于访问。我什至不知道从哪里开始,因为您的代码太抽象了,以至于无法说出它要做什么。

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多