我在模块文件中有以下内容:
module.exports = {
myfunc: myfunc
};
var myfunc = function(callback){
callback(err,reply);
};
在另一个文件中,我得到了对该模块的引用
var mymodule = require('./modules/mymodule');
mymodule.myfunc(function(err, reply){ ... });
当我调用mymodule.myfunc()时,我收到一条错误,说“属性'myfunc'不是函数”。 这仅在导出的函数中发生。同一个模块导出一些'字符串'字段,这些字段工作正常。
答案 0 :(得分:17)
分配module.exports
时,myfunc
功能仍未定义。在声明之后尝试分配它:
var myfunc = function(callback){
callback(err,reply);
};
module.exports = {
myfunc: myfunc
};
答案 1 :(得分:7)
要保留文件顶部的module.exports的原始排序,请将var myfunc
初始化更改为function myfunc
声明,后者 悬挂 。
module.exports = {
myfunc: myfunc
};
function myfunc(callback){
callback(err,reply);
};
声明 悬挂 ,但初始化不是,这就是原始示例不起作用的原因。 w3schools对JavaScript Hoisting有实际描述。