Web前端开发笔记——第四章 JavaScript程序设计 第六节 函数

简介: Web前端开发笔记——第四章 JavaScript程序设计 第六节 函数

一、函数的定义和声明


JavaScript中的函数与其它语言中的是一样的含义,都是将一组语句打包,使其可重复地使用。在函数内部声明的变量称为局部变量(可以在不同函数内使用名称相同的局部变量),只能在定义的函数内使用,与局部变量相提的还有全局变量,即所有的函数都内都可使用。

例如定义一个简单的hello_world()函数,其目的是在控制台输出“Hello Javascript!”,如下代码:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <script>
    function hello_world() {  //定义函数
    console.log("Hello Javascript!");
    }
    hello_world();  //调用函数
  </script>
  </body>
</html>


控制台中运行结果如下:

1667224496680.jpg

函数的定义/声明方式有以下三种:


(一)function关键字声明


直接通过function关键字声明的格式如下,其中function必须是小写:

function 函数名称(参数1,...){
  //函数体
  //return关键字
}


另外函数内可以通过return关键字可将值返回到其调用的地方,该关键字内可以是任何类型的变量数据或表达式

例如下列html代码,定义了一个无参函数,然后在控制台调用该函数,return关键字返回sum的值:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <script type="text/javascript">
    function number() {
    var i, j, sum;
    j = 1;
    sum = 0;
    for (i = 1; i <= 10; i++) {
      j *= i;
      sum += j;
    }
    return sum;
    }
    console.log(number());
  </script>
  </body>
</html>

运行结果如下:

1667224560290.jpg


(二)函数表达式定义函数


另外一种方法是通过函数表达式定义函数,这种方式创建的函数称为匿名函数,一般常用函数的创建还是第一种方式,匿名函数的格式如下,即创建一个函数并将其赋值给一个变量:

var 变量名称 = function 函数名称(参数1,...){
  //函数体
  //return关键字
}


两种方式比较起来,第二种方式没有函数声明提升,函数声明提升也就是当在执行JavaScript代码之前会首先读取所有的函数声明,所以即使将函数声明放在调用该函数的语句后面,程序也不会报错。


例如下列html代码,在控制台调用add_number函数,该函数目的是输出number1 + number2的值,并传入两个参数1,2,然后再声明函数add_number:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <script type="text/javascript">
    console.log(add_number());//这里并未给参数,所以输出的是非数值NaN
    console.log(add_number(1, 2));
    function add_number(number1, number2) {
    return number1 + number2;
    }
  </script>
  </body>
</html>


运行结果如下:

1667224669020.jpg

而通过第二种方式创建函数并赋值给变量,程序会报错:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <script type="text/javascript">
    console.log(number_sum(1, 2));
    console.log(number_sum());
    var number_sum = function add_number(number1, number2) {
    return number1 + number2;
    }
  </script>
  </body>
</html>


运行结果如下:

1667224697918.jpg


(三)Function()构造函数


还有另一种方式是通过Function()构造函数实例化一个函数对象,通过new操作符实现。

例如下列html代码,在控制台输出a+b的值:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title>text1</title>
  </head>
  <body>
  <script>
    var f_sum = new Function("a", "b", "console.log(a+b)");
    f_sum(3, 5);
  </script>
  </body>
</html>


运行结果如下:

1667224737789.jpg


二、函数的参数


JavaScript中函数对传入的参数没有特定的要求,当实参比函数声明中的形参个数少时,剩余的形参都会被设置为undefined。

例如下列html代码,定义两个有参函数,对其传参:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <script type="text/javascript">
    function display1(x, y, z) {
    console.log(x, y, z);
    }
    function display2(x) {
    console.log(x);
    }
    display1(20);
    display2(20, 30, 0);
  </script>
  </body>
</html>


运行结果如下:

1667224766772.jpg


三、函数的调用


在之前的文章中讲到,函数是一种引用数据类型,它实际上是对象,每个函数都是Function类型的实例,函数的调用有以下调用方式,分别是直接调用、方法调用、构造器调用和Apply调用,这里主要介绍前两种。


(一)直接调用


直接调用也就是在声明函数后直接调用,例如用HTML语言和JavaScript程序编写一个程序,要求通过函数实现,在点击提交按钮时检查用户名、电子邮箱和密码检查是否为空。

如下代码,在button中的onclick属性直接调用validate()函数:

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <form name="reg_form">
    <h2>登 录</h2>
    <p>用户名:<input type="text" name="uname" /></p>
    <p>电子邮箱:<input type="text" name="email" /></p>
    <p>密码:<input type="password" name="password" /></p>
    <button type=" submit" onclick="validate()">提交</button>
  </form>
  <script>
    function validate() {
    var f = document.reg_form;
    if (f.uname.value == "" || f.uname.value == null) {
      alert("请输入姓名");
      f.uname.focus();
      return false;
    }
    if (f.email.value == "" || f.email.value == null) {
      alert("请输入邮箱");
      f.email.focus();
      return false;
    }
    if (f.password.value == "" || f.password.value == null) {
      alert("请输入密码");
      f.password.focus();
      return false;
    }
    }
  </script>
  </body>
</html>


运行结果如下:

1667224807367.jpg

1667224819825.jpg

1667224830784.jpg


(二)方法调用


若将函数赋值给对象的成员,则此时函数就做叫方法,即方法的调用。

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
  <title></title>
  </head>
  <body>
  <script>
    var num = function() {
    console.log("HELLO javascript!");
    console.log(this);
    }
    var fun = {};
    fun.a = num; //将函数num赋值给一个对象fun
    fun.a(); //调用方法
  </script>
  </body>
</html>


运行结果如下,在控制台中可见该方法调用的结果是Object:

1667224454882.jpg

相关文章
|
16天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
30 3
|
13天前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
25 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
13天前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
11天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
11天前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
11天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
18 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
16天前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
22 1
|
17天前
|
前端开发 JavaScript
Bootstrap Web 前端 UI 框架
Bootstrap 是快速开发 Web 应用程序的前端工具包。
30 3
|
17天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
17 3
|
17天前
|
JavaScript 前端开发 API
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
16 1