导出:
var MyFunction = func(){}
function MyFunction func(){}
未导出:
var myFunction = func(){}
function myFunction func(){}
我读过var functionName = function() {} vs function functionName() {}这是关于Javascript的内容。
我考虑将其从function myFunction func(){}
更改为var myFunction = func(){}
的原因是后来使我更容易进行单元测试。
所以我想知道在进行此更改之前是否需要注意什么。
答案 0 :(得分:0)
这两种形式的主要区别在于,它们不仅在语法上而且在它们的语义上也不同:
func name (...)
格式的“普通”格式
创建一个常规的命名函数。var
创建函数”实际上是在创建所谓的匿名函数并将其值分配给变量。区别在于,在Go中,匿名函数的行为类似于 closures ,而常规函数则没有。
闭包是一种函数,它从其外部词法范围“捕获”用于函数主体的任何变量(而不会被局部变量和那里的函数参数所遮盖)。
当在包的顶层(即在任何函数的主体外部)使用这两种形式时,这种区别可能并不明显,因为在这种情况下,外部作用域是包的全局变量,而在其他函数内部区别是显而易见的:“常规”形式根本无法使用。
其他区别是您可以替换包含函数值的变量中的值,而对普通函数则不能这样做。
不过,如果我们在谈论顶级代码,Flimzy提供的建议仍然成立:在生产Go代码中,具有包含函数值的全局变量的代码是直到否则。