【问题标题】:What's the purpose (and any extra effect) of calling function when declaring export?声明导出时调用函数的目的(以及任何额外的效果)是什么?
【发布时间】:2019-01-17 17:16:33
【问题描述】:

简单的导出以函数/变量/类声明结束,例如 export default hello

想象hellohello 模块中的一个函数。在要导出的模块中调用export default hello() 和在导入import hello from "./hello" 的模块中调用hello() 有什么区别?

除了第二个选项需要在导入hello的模块中初始化(调用)函数之外,似乎没有什么区别。

// hello.js

function hello () {
  console.log("hello")
 }

// 1st option function declaration
export default hello

// 2nd option - run function on export
export default hello()

// index.js

import hello from "./hello";

// 1st option initialise (calling)
hello();

// 2nd option - no calling needed

在整个网络上进行了搜索,但找不到可能的副作用或哪些是处理包含和导出函数的模块的更好方法。

【问题讨论】:

  • 这完全取决于你的函数实际做了什么,以及它是否被设计为被多次调用。如果该函数是一个随机实用程序,那么预先调用它是没有意义的。对于一般情况,没有正确或错误的答案。
  • 谢谢。那很有帮助。您是否会说,第二个选项也是进行导出的正确方法(当然取决于用例)??
  • 这取决于您的用户想要导入的东西是函数,还是函数返回的任何值。如果您的文件是function getHello(){ return hello; } export default getHello(),它将与export default hello; 相同。重要的是要导出的值,而不是值的来源。

标签: javascript ecmascript-6 import module export


【解决方案1】:

如果你从两个不同的模块导入函数:

  // A
 import hello from "./hello";
 hello();

 //B
 import hello from "./hello";
 hello();

函数被调用两次。如果导出函数结果,函数肯定只运行一次。

也就是说,在第二种情况下完全没有任何意义:

 function hello () {
  console.log("hello");
  return "something";
 }

 export default hello();

等于:

 console.log("hello");
 export default "something";

【讨论】:

  • 对不起,我不明白。为什么要导入两次相同的功能? A和B没有区别
  • 那么,哪一个更好?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多