我知道Javascript中有3种不同类型的函数声明,并且我知道有细微的差别,但是我不知道为什么这样好,为什么我们需要全部三个?
function MyObject{
function SomeName(){}
this.SomeName = function(){}
var SomeName = function(){}
}
答案 0 :(得分:3)
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 = () => {}
。
答案 1 :(得分:2)
它们实际上是相似的。您在问函数表达式和函数声明的差异
// 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;
}
因此,在使用函数表达式之前,必须先声明它们。
答案 2 :(得分:0)
function SomeName(){}
==>创建此类函数时,这是一个整体行为,或者您可以说这是该函数的整体功能。
this.SomeName = function(){}
==>这是您用于特定时间的实例,后来将该函数的输出用作任何数据类型。
var SomeName = function(){}
==> function SomeName(){}
和var SomeName = function(){}
并没有太大的不同。因为这只是您需要的执行和使用方式。作为第三个版本,您使用的是为其分配一些值。因此,它可能比版本1消耗更多的内存。除此之外,我看不出它们之间有任何区别。在将var应用于任何函数的更多内容上,您是在为某个函数分配数据类型,从而在某些情况下限制其输出。
我希望我能简要解释一下您的概念。有任何建议或疑问,我想回应。