我知道JavaScript中有3种不同类型的函数声明,虽然它们之间存在一些细微的差异,但我不知道为什么这是好的,我们为什么需要全部3种类型?
function MyObject{
function SomeName(){}
this.SomeName = function(){}
var SomeName = function(){}
}
我知道JavaScript中有3种不同类型的函数声明,虽然它们之间存在一些细微的差异,但我不知道为什么这是好的,我们为什么需要全部3种类型?
function MyObject{
function SomeName(){}
this.SomeName = function(){}
var SomeName = function(){}
}
function SomeName(){}
:你不能将 SomeName
分配为其他内容;该函数被挂起到最近的函数范围,使你能够在代码的底部声明它,并在顶部使用它。
this.SomeName = function(){}
:你公开此函数以便可以通过 MyObject.SomeName
访问它。
var SomeName = function(){}
:你可以将 SomeName
分配给另一个内容;变量名称被挂起到最近的函数范围,但在声明之前使用它将导致 SomeName 不是函数错误。
仅供娱乐,还有
const SomeName = function(){}
:你不能将 SomeName
分配为其他内容;在声明之前使用它将导致 SomeName 未定义的错误。
let SomeName = function(){}
:你可以将 SomeName
分配给另一个内容;在声明之前使用它将导致 SomeName 未定义的错误。
偏好
个人而言,我倾向于使用 export function SomeName(){}
,但当我不立即导出该函数时,我会使用 const SomeName = () => {}
。
实际上它们很相似。你问的是函数表达式和函数声明之间的区别。
// function declaration
function add(a, b) {
return a+b;
}
// function expression
var add = function(a, b) {
return a+b;
}
仍然存在一个显著的区别:
提升: 当加载JavaScript文件时,所有使用函数声明编写的函数都会被提升,基本上在执行任何代码之前就已经“知道”了。因此,您可以在程序早期调用函数并稍后声明它。它会起作用。
这与“函数表达式”不同。如果在表达函数之前调用函数,则无法工作。
// function declaration works
add(5, 10);
function add(a, b) {
return a+b;
}
// function expression doesn't work
subtract(3, 9);
var subtract = function(a, b) {
return a - b;
}
function SomeName(){}
==> 当你创建这样的函数时,它是一个完整的行为或者说是这个函数的整体功能。
this.SomeName = function(){}
==> 这个用于特定实例的时间,并将该函数的输出作为任何数据类型后续使用。
var SomeName = function(){}
==> function SomeName(){}
和 var SomeName = function(){}
没有太大的区别。因为它只取决于你如何执行和使用它。在第三个版本中,你正在给它分配一些值。因此,它可能会比版本1消耗更多的内存。除此之外,我没有看到它们之间的任何区别。更重要的是,将 var 应用于任何函数都会将数据类型分配给函数,从而限制其在某些上下文中的输出。
我希望我在简短的解释中让您的概念清晰了。如果有任何建议或疑问,我很乐意回答。