在学习JavaScript时,您可能已经注意到您经常听到函数表达和函数声明之类的单词。他们听起来确实一样,作为初学者,您可能不会引起太多关注。
让我们尝试分解函数表达式和函数声明之间的差异。
名称
如果创建具有名称的函数,则它的函数声明。因此,您声明了一个名称的函数。
如果您创建一个没有名称的函数,则在这种情况下将成为匿名函数和功能表达式。
较短的方式
如果您有一行,甚至更短的方式
当我将cookfunction函数保存为常数时,看起来可能令人困惑
但是我们在做什么,我们不命名此功能。我们只是将其存储在一个常数中,以便我们以后参考此功能。
我可能想稍后在某个地方使用此功能,但是如果我无法以某种方式引用它,我将无法称呼此功能,这是有道理的?
提升
在函数声明方面,它们会悬挂。当您声明函数并在JavaScript中创建变量时,无论顺序如何,它们都是所有其他事项的重点。因此,即使我拨打所有功能并在以后发表声明,我的功能声明也会在优先树中秘密地上升,我们会在编写代码时不会在物理上看到,而是在结果中看到的。
这是一个示例
读取从上到下的代码。
我称该功能 cookfunction ,但我没有解释它的作用,然后我解释了此功能应该做什么。
因此,您会认为我试图告诉JavaScript,嘿,做 cookfunction ,但它甚至没有解释,但它应该做什么。
悬挂式JavaScript秘密将功能声明列入最高,将其保存在全局范围中,并且代码将以反向顺序执行。
因此,该函数声明将首先发生,并且只有在此函数中才会被调用,即使它被编写为VICE。
全局范围是指应用程序中任何代码可用的环境,它是全局。
不久,无论您保存在变量中或声明函数时,无论订单如何,它都会先保存。每当执行启动时,就已经知道现有变量和函数。
函数表达式未悬挂。原因很简单。当我们使用函数表达式时,我们不会使用此函数声明任何变量或表达式,我们只将此函数保存在变量中,因此该函数只是一个值。
在提起时,该值并未悬挂,但是我们保存此功能的变量无论如何都会悬挂。它只是尚不具有函数值。
这就是为什么我们仅通过编写最先保存值的变量名来调用函数的原因。 JavaScript将升起const cookfunction 变量,而不是其中的值。
我应该使用哪一个?
我们需要意识到的另一个重要区别是功能的用法。
我们如何,何时以及在哪里决定需要函数表达式或函数声明?哪一个更好,更快或更现代?
如果您只需要一次功能,那么它就足够了,它一次调用一次,我们可以忘记它,函数表达式是一个不错的选择。而不是强迫JavaScript记住许多函数和变量并保存在全局范围中的所有内容,而只需制作函数表达式即可。
但是,如果您需要在许多地方使用该函数,并且其逻辑已连接到另一个逻辑,则需要使用函数声明,因此它保存在全局范围中并可以为每个人访问。
在其他几种情况下,我们选择函数表达而不是函数声明,这些声明将在下一篇文章中介绍。
关于提升和全球状态还有更多的了解,这也非常重要,但是请确保了解函数表达式和函数声明之间有什么区别。