当前位置:首页 > 编程技术 > 正文内容

解释函数 foo() {} 和 var foo = function() {} 之间 foo 用法的差异

yc8881年前 (2023-01-06)编程技术188

解释函数 foo() {} 和 var foo = function() {} 之间 foo 用法的差异

在 JavaScript 中,我们有不同的方法来定义函数。函数 foo() {} 和 var foo = function() { } 是定义函数的两种不同方法。这两种方式都有其优点和不同的用例;但是,两者在执行函数时给出相同的结果。

因此,本教程将教我们定义函数的两种方法之间的区别。

函数 foo() { } 的说明:函数声明

函数 foo() { } 是在 JavaScript 中声明函数的常规方法,每个初学者和开发人员都使用。此外,我们可以将其称为命名函数。

JavaScript 在程序执行控制到达声明函数的范围时计算函数声明。函数声明计算不是分步过程的一部分,而是在开始时进行评估。

此外,函数声明被提升在声明它的特定范围内的每个代码的顶部。因此,我们可以在范围中的任何位置调用函数,甚至在声明之前。

语法

用户可以按照下面的语法来声明函数。

function foo(parameters, .... ) {    // function body }

在上面的语法中,'function' 是表示函数声明的关键字,foo 是函数名称。

在这个例子中,我们通过函数声明定义了函数 foo()。之后,我们在调用正常函数时调用了它。

<html>    <body>       <h2>function foo() { } (function declaration)</h2>       <div id="output"></div>       <script>          let output = document.getElementById("output");                    // declaring the function          function foo() {             output.innerHTML += "The function foo is invoked!";          }          foo();       </script>    </body> </html>

在下面的示例中,我们定义了带有参数的函数。我们将 invokedPosition 作为第二个参数传递,表示我们调用函数的位置。

我们在声明之前调用了 foo() 函数,因为当执行流进入范围并提升在顶部时,JavaScript 会在开始时评估该函数。

<html>    <body>       <h2>function foo() { } (function declaration)</h2>       <div id="output"></div>       <script>          let output = document.getElementById("output");                    // As foo is hoisted on top, we can call the function before the declaration          foo(10, "Top");                    // declaring the function with parameters          function foo(param1, inovkingPosition) {             output.innerHTML += "The function foo is invoked from " + inovkingPosition + "</br>";             output.innerHTML += "The value of the param1 is " + param1 + " <br/> <br/>";          }          foo(20, "bottom");       </script>    </body> </html>

var foo = function() { } 的解释:函数表达式

var foo = function() { } 也与定义函数相同,称为函数表达式。在这里,function() { } 是一个函数表达式,我们将其存储在 foo 变量中。foo和其他变量一样是一个普通变量,甚至我们可以在foo变量中存储数字和字符串。

JavaScript 不像函数声明那样在开始时计算函数表达式。它逐步计算函数表达式。当执行流到达函数表达式时,JavaScript 会计算表达式并将其存储在 foo 变量中。

此外,函数表达式不会提升在代码的顶部,因此在定义函数表达式(如函数声明)之前,我们无法调用它。

语法

用户可以按照以下语法使用函数表达式定义函数。

var foo = function (params) {        // function body };

在上面的语法中,函数是在没有名称的情况下定义的,因此我们可以将其称为匿名函数。我们可以使用 foo 变量作为函数的标识符。

在这个例子中,我们使用函数表达式定义了函数,并将其存储在foo标识符中。之后,我们使用 foo 标识符来调用存储在其中的函数表达式,并且我们还在 foo 标识符中传递了参数。

<html>    <body>       <h2>var foo = function() { } (function expression)</h2>       <div id="output"></div>       <script>          let output = document.getElementById("output");                    // defining the function expression and storing it in the foo variable          var foo = function (param) {             output.innerHTML += "Inside the function expression. </br>";             output.innerHTML += "The value of the param is " + param + "</br>";          };                    // calling the function expression via foo identifier          foo("Hi Users!");       </script>    </body> </html>

函数表达式有不同的用例。用户可以将其用作回调函数来编写函数的简短语法。此外,用户可以将其用作闭包功能。有时,我们需要将函数作为参数传递,然后我们可以使用函数表达式。

在这个例子中,我们已经将函数表达式作为 sort() 方法的参数传递。用户可以看到我们已经将匿名函数作为参数传递,而不是用名称编写声明。

<html>    <body>       <h2>Passing function expression as an argument</h2>       <div id="output"></div>       <script>          let output = document.getElementById("output");          let number = [320, 45, 3, 23, 54];                 // passing the function expression as an argument of the sort() method          number.sort(function (element1, element2) {             return element2 - element1;          });          output.innerHTML += "The sorted array is " + number;       </script>    </body> </html>

函数 foo() { } 和 var foo = function() { } 之间的区别

下表突出显示了函数 foo() { } 和 var foo = function() { } 之间的主要区别:

函数 foo() { }

var foo = function() { }

它是一个函数声明。

它是一个函数表达式。

它被吊在范围的顶部。

它没有在范围内悬挂。

JavaScript 在范围执行开始时对其进行评估。

JavaScript 在分步代码执行中对其进行评估。

我们可以使用函数名称来识别它。

我们可以使用存储它的标识符来识别它。

它用于定义普通函数。

当我们需要将函数作为参数传递或需要使用函数作为闭包时,会使用它。

结论

在 JavaScript 中,有两种方法可以定义函数:函数声明函数表达式。函数声明是使用函数关键字定义的,后跟函数名称,通常写为函数 foo() {}。当程序执行到达声明函数声明的范围时,JavaScript 会评估函数声明,并提升到该范围内代码的顶部。这意味着可以在声明它们之前调用它们。

函数表达式是使用变量定义的,通常写为 var foo = function() {}。函数表达式不会被提升,必须在调用它们之前进行定义。函数声明和函数表达式可以执行相同的任务,但它们具有不同的语法和计算行为。


本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10554.html

标签: JavaScript
分享给朋友:

“解释函数 foo() {} 和 var foo = function() {} 之间 foo 用法的差异” 的相关文章

【说站】laravel实现自定义404页面并给页面传值

【说站】laravel实现自定义404页面并给页面传值

以 laravel5.8 为例,虽然有自带的404页面,但太简单,我们更希望能自定义404页面,将用户留在站点。实现的方式很简单,将自定义的视图文件命名为 404.blade.php,并放到 reso...

【说站】Thymeleaf报错Error resolving template “XXX”

【说站】Thymeleaf报错Error resolving template “XXX”

修改了一下开源项目的目录结构访问突然报错Error resolving template “XXX”可能原因有如下三种:第一种可能:原因:在使用springboot的过程中,如果使用thymeleaf...

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

这篇文章主要介绍了详解Centos8 配置静态IP的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来学习一下!1. 查看自己的网关地址点击虚...

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

今天在安装MySQL时出现starting the server失败,经过查询分析得出以下结论,记录一下操作步骤。原因分析:如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。star...

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状;该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线。下面,通过C#程序代码介绍如何...

【说站】Java从resources读取文件内容的方法有哪些

【说站】Java从resources读取文件内容的方法有哪些

本文主要介绍的是java读取resource目录下文件的方法,比如这是你的src目录的结构├── main│ ├── java│ │ └── ...