我有一个模块,我想将一个函数分配给一个公共变量,然后使用该模块中的函数。请参阅下面的示例,了解我认为我能够做到的事情。
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();
}());
test.js
;(function() {
let someFunction = function() {
console.log("Old function");
}
function callSomeFunction() {
someFunction();
}
module.exports = {
someFunction,
callSomeFunction
}
}());
为了使这项工作,我目前有一个方法来设置模块中的功能,所以test.js
看起来像下面的代码片段。
test.js
;(function() {
let someFunction = function() {
console.log("Old function");
}
function callSomeFunction() {
someFunction();
}
function setSomeFunction(newFunction) {
someFunction = newFunction;
}
module.exports = {
setSomeFunction,
callSomeFunction
}
}());
由于我不认为这是一个非常优雅的解决方案,我想知道是否有替代方案,也许某种方式让前两个片段按照意图工作,或者我是否坚持使用setter方法
答案 0 :(得分:0)
function callSomeFunction() {
someFunction();
}
callSomeFunction
的定义时间早于someFunction
(称为hoisting)。
导致以下定义顺序:
1. callSomeFunction
2. someFunction
您应该将此功能更改为const
或let
存储,就像您使用someFunction
一样,或将它们都设为function
。