哪种方式最好在javascript中传递函数?

时间:2016-09-23 17:25:16

标签: javascript node.js

如果我有3个js文件如下:

file1.js

this.functionName = function(params) { //do something};

file2.js

function fucntionName(params) { 
     //do something
};

module.exports = {
     functionName
};

然后在第三个js文件中,我可以要求两个文件的对象并调用它们中定义的两个函数;例如,如果我在index.js中调用它们

let file1 = require('/file1');
let file2 = require('/file2');

file1.functionName('some param');
file2.functionName('some param');

两者之间有什么区别,哪个更受欢迎?

2 个答案:

答案 0 :(得分:1)

如果您正在使用带有Babel的ES6,那么使用export语法会更加清晰。也就是说,如果你想直接引用这个函数,就像这样:

const fName = function(){
  /* do stuff here */
}
export default fName;

或者,如果您想导出多个功能而无需在module.exports中手动分配它们,您可以这样做:

export const fName2 = function(){ /* do stuff */ }

那么你可以直接导入第一个,然后通过解构导入第二个:

import fName from './file1';
import { fName2 } from './file2';

希望这是有帮助的

答案 1 :(得分:0)

第一个 - 是

引自this帖子:

  • 在Node模块的顶级代码中,"这个"相当于module.exports。

因此2可能看起来相同。但是,他们不是 - 在你的第二个例子中,你正在改变" module.exports"引用的对象。这是危险的,因为您之前对" module.exports"引用的原始对象进行了任何修改。 在同一模块中(感谢Kevin让我知道这不清楚)在需要时将不再可用。将来,如果有人想要使用其他方法添加一个函数,并在重新分配之前使其可用,他们可能会发现自己无法访问它,同时拥有一些正确的代码。

另外 - 通过让自己相信第二种方法具有相同的效果,你可能会想做类似的事情:

module.exports = {
     functionName1
};
// code, code, code
module.exports = {
     functionName2
};

这显然会剥夺您对原始functionName1方法的访问权限。

当然,您可以同时将这两个功能添加到新对象中,但是如果它们在您的范围内不可用(例如,它们已经在另一个功能中定义)会怎样?在功能可用时,您仍然必须使用第一种方法。

这两种方法显然都有效。我推荐第一个,因为对我而言,它更清晰,更不容易出错。

<强>然而

由于this取决于上下文,因此将它们全部放在一起并坚持module.exports。你最终会得到类似的东西:

module.exports.functionName = function(params) { 
    //do something
};

function mySimpleFunction(params){
    //do something
}
module.exports.functionName = mySimpleFunction;

(如果您关注的是关联声明的函数)