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

相关文章
|
机器学习/深度学习 JavaScript 前端开发
JS进阶教程:递归函数原理与篇例解析
通过对这些代码示例的学习,我们已经了解了递归的原理以及递归在JS中的应用方法。递归虽然有着理论升华,但弄清它的核心思想并不难。举个随手可见的例子,火影鸣人做的影分身,你看到的都是同一个鸣人,但他们的行为却能在全局产生影响,这不就是递归吗?雾里看花,透过其间你或许已经深入了递归的魅力之中。
534 19
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
382 32
|
JavaScript
JS实现多条件搜索函数
JS封装的多条件搜索
|
JavaScript 前端开发 Java
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
柯里化是一种强大的函数式编程技术,它通过将函数分解为单参数形式,实现了灵活性与可复用性的统一。无论是参数复用、延迟执行,还是函数组合,柯里化都为现代编程提供了极大的便利。 从 Redux 的选择器优化到复杂的数据流处理,再到深度嵌套的函数优化,柯里化在实际开发中展现出了非凡的价值。如果你希望编写更简洁、更优雅的代码,柯里化无疑是一个值得深入学习和实践的工具。从简单的实现到复杂的应用,希望这篇博客能为你揭开柯里化的奥秘,助力你的开发之旅! 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
JavaScript 前端开发
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
556 2
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
420 1
JavaScript中的原型 保姆级文章一文搞懂
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
315 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
690 5

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1416
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    690
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    549
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    559
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    646
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    826
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1622
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    389
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1342
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    658