【问题标题】:Access to functions in required modules defined in the calling module访问调用模块中定义的所需模块中的函数
【发布时间】:2015-01-09 08:07:20
【问题描述】:

你如何在一个必需的模块中调用一个在主程序中定义的函数?

Main.js:

var http = require('http');
var aFunc = function() {return 1;}
var bFunc = require('./bFunc').bFunc;
var cFunc = function() {console.log(aFunc() + bFunc()); } // should equal 3.

httpServer = http.createServer(cFunc()).listen(80);

bFunc.js:

var bFunc = function() {return aFunc() + aFunc()};
exports.bFunc = bFunc;

我不想在 bFunc 中定义(复制)aFunc,也不想将 aFunc 放入它自己的文件(aFunc.js)中。有没有办法通过引用“需要”bFunc的主程序来访问bFunc中的aFunc?

【问题讨论】:

    标签: javascript node.js module


    【解决方案1】:

    您必须将afunc 传递给bfunc

    // main.js
    var cFunc = function() {console.log(aFunc() + bFunc(afunc)); }
    
    // bfunc.js
    var bFunc = function(f) {return f() + f()};
    

    JavaScript 有词法范围

    【讨论】:

    • 好吧,你可以创建一个全局变量。但这会破坏封装。
    • @ChrisGciso:如果你觉得你不得不违背常规,你可能是......
    • 但是使用 node.js 运行时 main.js 不是它自己的作用域吗? bFunc 是否无权访问该范围?
    • @ChrisGciso:这里也不例外。 bFuncmain.js 定义,它在单独的模块中定义。想象一下你有function foo() { }; function bar() { var baz = 'something'; foo(); }。在这里,foo 也无权访问baz,因为foo 没有在bar 内部定义(其中barfoo 获取引用无关紧要,我也可以定义一个@ 987654333@ 简单查找全局变量的函数)。
    • 即使bFunc 可以访问main.js 中定义的变量,使bFunc 依赖 这些变量也是不好的设计,因为它创建了一个隐式接口。
    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多