Javascript 在模块之间分配功能

Javascript 在模块之间分配功能,javascript,node.js,Javascript,Node.js,我有一个模块,我想给一个公共变量分配一个函数,然后在该模块内使用该函数。请参见下面的示例,了解我认为我能够做的事情 main.js ;(function() { const test = require("./test"); function newFunction() { console.log("New function"); } // This works fine test.someFunction = newFunction;

我有一个模块,我想给一个公共变量分配一个函数,然后在该模块内使用该函数。请参见下面的示例,了解我认为我能够做的事情

main.js

;(function() {
    const test = require("./test");

    function newFunction() {
        console.log("New function");
    }

    // This works fine
    test.someFunction = newFunction;
    test.someFunction();

    // But this doesn't
    test.callSomeFunction();
}());
;(function() {
    let someFunction = function() {
        console.log("Old function");
    }

    function callSomeFunction() {
        someFunction();
    }

    module.exports = {
        someFunction,
        callSomeFunction
    }
}());
;(function() {
    let someFunction = function() {
        console.log("Old function");
    }

    function callSomeFunction() {
        someFunction();
    }

    function setSomeFunction(newFunction) {
        someFunction = newFunction;
    }

    module.exports = {
        setSomeFunction,
        callSomeFunction
    }
}());
test.js

;(function() {
    const test = require("./test");

    function newFunction() {
        console.log("New function");
    }

    // This works fine
    test.someFunction = newFunction;
    test.someFunction();

    // But this doesn't
    test.callSomeFunction();
}());
;(function() {
    let someFunction = function() {
        console.log("Old function");
    }

    function callSomeFunction() {
        someFunction();
    }

    module.exports = {
        someFunction,
        callSomeFunction
    }
}());
;(function() {
    let someFunction = function() {
        console.log("Old function");
    }

    function callSomeFunction() {
        someFunction();
    }

    function setSomeFunction(newFunction) {
        someFunction = newFunction;
    }

    module.exports = {
        setSomeFunction,
        callSomeFunction
    }
}());
为了实现这一点,我目前有一个在模块中设置函数的方法,因此
test.js
看起来像下面的代码片段

test.js

;(function() {
    const test = require("./test");

    function newFunction() {
        console.log("New function");
    }

    // This works fine
    test.someFunction = newFunction;
    test.someFunction();

    // But this doesn't
    test.callSomeFunction();
}());
;(function() {
    let someFunction = function() {
        console.log("Old function");
    }

    function callSomeFunction() {
        someFunction();
    }

    module.exports = {
        someFunction,
        callSomeFunction
    }
}());
;(function() {
    let someFunction = function() {
        console.log("Old function");
    }

    function callSomeFunction() {
        someFunction();
    }

    function setSomeFunction(newFunction) {
        someFunction = newFunction;
    }

    module.exports = {
        setSomeFunction,
        callSomeFunction
    }
}());
因为我觉得这不是一个非常优雅的解决方案,所以我想知道是否有其他方法,也许是某种方法可以让前两个代码片段以嵌入方式工作,或者我是否坚持使用setter方法

function callSomeFunction() {
    someFunction();
}
callSomeFunction
的定义时间早于
someFunction
(称为)

产生以下定义顺序:

1. callSomeFunction
2. someFunction

您应该将此函数更改为由
常量存储,或者像使用
someFunction
一样将其设置为
常量或
let
,或者将它们都设置为
函数

,除非我遗漏了一些内容,否则您的解决方案很遗憾无法工作。即使使用
let
function
定义这两个函数,调用旧函数时也会出现相同的行为。