【学习笔记15】JavaScript的函数

news2025/8/12 7:46:25

一、函数

笔记首发

(一)什么是函数

  1. 🙄 前端的函数, 与数学的函数, 完全是两个概念
  2. 🙄 可以粗暴的理解为 一个盒子
  3. 🙄 当一段需要多次使用的复杂代码段, 我们可以把它放在(抽离)一个盒子中(就是函数)
  4. 🙄在需要使用的地方去调用即可

(二)如何拥有(使用)函数

函数分为定义(创建)调用

  • 😕 定义(创建): 必须要有, 没有的话, 无法调用
  • 😕 调用: 也必须要有, 没有的话, 定义就没有意义了

1、定义函数

1 语法: function () {}

  • 😕 赋值式定义 :var fn = function () {}
  • 😕 声明式定义 :function 函数名() {}

2 具体含义

  • 🥰 function —> 关键字
  • 🥰 函数名(可以不写) —> 不写的函数, 我们称之为匿名函数, 如果有 叫具名函数(函数)
  • 🥰 () —> 书写参数的位置(形参)
  • 🥰 {} —> 代码, 函数调用要执行的代码

2、函数调用

  • 😕 函数的定义分2种方式, 调用只有1种
  • 🙄 语法: 函数名()
        var fn1 = function () {
            // 这里边写上将来调用时要执行的代码
            console.log('我是函数fn1, 我是赋值式定义的')
        }
        fn1()

        function fn2() {
            // 这里边写上将来调用时要执行的代码
            console.log('我是函数fn2, 我是声明式定义的')
        }
        fn2()

在这里插入图片描述

(三)明式与赋值式的区别

  • 😛赋值式定义, 不能再定义前调用函数, 声明式可以

1、赋值式函数

        fn()   //fn is not a function
        var fn = function () {
            console.log(1);
        }

在这里插入图片描述

2、声明式函数

        fn()     //2
        function fn() {
            console.log(2);
        }

二、变量提升

  • 在浏览器读JS代码的时候,有一个预解析, 此时会有一个变量提升

(一)什么是变量提升

  • 在预解析时, 将JS内部的变量, 全部提升到当前作用域顶端(当前代码的最上边)
  • 变量提升的时候, 不会到最顶端, 可以理解为, 把声明变量提升到最顶端, 但是没赋值

(二)赋值式变量提升

        fn()
        var fn = function () {
            console.log(1);
        }
        fn()
    自己写的代码:
        fn() 
        var fn = function () {
            console.log(1)
        }
        fn()

    浏览器预解析
        fn()                        ---> 不需要变量提升
        var fn = function () {      ---> 需要变量提升
            console.log(1)
        }
        fn()                        ---> 不需要变量提升

    变量提升后
        var fn;         ---> fn == undefined
        fn()            ---> undefined()
        fn = function () {console.log(1)}
        fn()            ---> 打印1

(三)声明式变量提升

        fn()
        function fn() {
            console.log(1);
        }
        fn()
    自己写的代码 
        fn()
        function fn() {
            console.log(1)
        }
        fn()

    浏览器预解析
        fn()                ---> 不需要提升
        function fn() {     ---> 需要 函数声明提升
            console.log(1)
        }
        fn()                ---> 不需要提升

    函数声明提升后
        function fn() {
            console.log(1)
        }

        fn()            ---> 正常打印
        fn()            ---> 正常打印

在这里插入图片描述

三、函数的参数

(一)为什么要有参数

    /**
     *  为什么要有参数?
     *      如果没有参数, 那么函数的功能相对单一, 不够灵活
     *      函数的参数他的作用 ---> 能够让函数的功能更加灵活, 更方便在多个地方调用 
     *      参数也可以让我们的函数更具有差异性
     * 
     *  参数语法
     *      1. 形参     --->    function或者函数名后的小括号
     *      2. 实参     --->    函数调用时的小括号中
     * 
     *  参数的作用
     *      1. 形参
     *           每书写一个形参, 就相当于在函数内部创建一个变量, 形参的值是由实参传递进来的
     *      2. 实参
     *           按照书写顺序 一一对应, 传递给形参
    */

1、不传参数

    function fn() {
      console.log(1);  // 想想这是一段很复杂的功能
      console.log(1);  // 想想这是一段很复杂的功能
      console.log(1);  // 想想这是一段很复杂的功能
      console.log(1);  // 想想这是一段很复杂的功能
      console.log(1);  // 想想这是一段很复杂的功能
    }

    fn()

在这里插入图片描述

2、传参数

    function fn(i) {
      console.log(i)  // 想想这是一段很复杂的功能
      console.log(i)  // 想想这是一段很复杂的功能
      console.log(i)  // 想想这是一段很复杂的功能
      console.log(i)  // 想想这是一段很复杂的功能
      console.log(i)  // 想想这是一段很复杂的功能
    }

    var num = fn(1)  // 调用的时候打印1
    console.log(num)

在这里插入图片描述

(二)函数参数的数量

参数数量不一致
😏 1. 形参少, 实参多
😥 2. 实参少, 形参多

1、形参少, 实参多

        function fn(a) {
            console.log(a)  // 1
        }
        fn(1, 2, 3)
        我们当前案例, 传递 1个形参, 3个实参
        第一个实参, 传递给对应的形参
        后续的所有参数, 都不能通过形参获取

2、实参少, 形参多

        function fn(a, b, c) {
            // 100 undefined undefined
            console.log(a, b, c);    
        }
        fn(100)

在这里插入图片描述

        我们当前案例, 传递3个形参, 1个实参
        第一个实参, 传递给对应的形参
        后续没有实参
        所以, 后续的形参相当于 之声明不赋值 ===> undefined

四、函数参数的默认值

  • 🤔 创建形参的时候, 直接赋值
  • 🤗 如果传递对应实参, 按照实参的值
  • 😛 如果没有传递对应实参, 按照默认值
        function fn(a, b, c) {
            // 100 undefined undefined
            console.log(a, b, c)    
        }
        fn(100)

        function fn1(a, b = 100, c = 200) {
            console.log(a, b, c)
        }
        fn1(50)               // 50, 100, 200
        fn1(50, 500)          // 50, 500, 200
        fn1(50, 500, 1000)    // 50, 500, 1000

在这里插入图片描述

五、函数的返回值

😮 1. 每一个函数都有返回值, 不管是否写了返回值
😮 2. 每个函数默认都会有返回值 —> 默认返回undefined
😮 3. 如果我们自己手写了返回值, 那么就不会返回默认值了, 返回的是我们书写的
😮 4. 函数返回值书写语法: return 要返回的内容
😮 5. 注意点: 函数的返回值具有中断函数的功能, 所以我们手写返回值需要放在最后

        function fn1() {
            // console.log(1)
        }
        // fn函数的返回值, 会赋值给变量myFn
        var myFn = fn1() 
         // undefined
        console.log(myFn)  

        function fn2() {
            return '我是fn2的返回值'
        }
        var myFn1 = fn2()
        console.log(myFn1)  // 我是fn1的返回值

在这里插入图片描述

return中断效果

    function fn(i) {
      if (i == 0 ) {
        return '参数i==0, 函数被中断执行'
      }

      console.log('参数不是0, 正常执行函数')
      return '参数i不等0, 就是我想要的结果'
    }
    var num = fn(1)
    console.log(num)

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【math】利用Cardano方法对一元三次方程求解及python实现

文章目录【参考】【问题描述】求解一元三次方程【代码实现】现成的包 cardano_method根据公式编写求解代码【总结】【参考】 用Cardano方法求解三次方程介绍cardano方法求解下载cardano方法包x^310求解问题、三次方程反函数问题Micorsoft-Math-solver 微软数学工具WolframAlph…

《Transformers自然语言处理系列教程》第1章:Transformers 介绍

2017年,谷歌的研究人员发表了一篇论文,提出了一种用于序列建模的新型神经网络架构。这种架构被称为Transformer,在机器翻译质量和训练成本方面都优于递归神经网络(RNNs)。 与此同时,一种名为ULMFiT的有效迁移学习方法表明,在一个非常大和多样化的语料库上,训练长短期记…

Kotlin拿Android本地视频缩略图

本文主要讨论如下三个问题: 如何拿到本地视频?怎么拿视频缩略图?缩略图如何压缩? 1 如何拿到本地视频? 1.1 定义数据结构 先定义媒体信息数据结构MediaInfo,以及视频信息数据结构VideoInfo。 open class…

我参加NVIDIA Sky Hackathon 训练文件的路径设置

各变量的作用 KEY 对应的是 NVIDIA ngc 的那个网站上面生成的那个 keyGPU 的索引, 这个一般不需要修改, 因为大家只有一块 GPU用户实验目录, 这个文件夹用于存放后续过程产生的一系列的文件数据下载目录, 存放数据 本地工程目录&a…

Java并发编程实战读书笔记二

第五章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 如下,如果list含有10个元素,线程A调用getLast的同时线程B调用deleteLast,那么getLast可能会报ArrayIndexOutOfBoundsException 改为如下方式能确保size和get一致 Vector迭代也…

【795. 区间子数组个数】

来源:力扣(LeetCode) 描述: 给你一个整数数组 nums 和两个整数:left 及 right 。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数。 生成的测试用例…

微信小程序| 用小程序复刻微信Wechat

📌个人主页:个人主页 ​🧀 推荐专栏:小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏!从个人到商业的全套开发教程,实打实的干货分享,确定不来看看? …

新的趋势:From Big to Small and Wide data

新的趋势:From Big to Small and Wide data 所以,在这个时候,作为率先提出要做 MySQL 开源 HTAP 数据库的 StoneDB,想要稍微冷静一下。 不是说我们不做 HTAP 了,而是有了一个新的思路。这个思路,也同样来…

【模型训练】YOLOv7车辆三类别检测

YOLOv7车辆三类别检测 1、车辆三类别检测模型训练2、模型评估3、模型和数据集下载网盘链接1、本项目采用YOLOv7算法实现对车辆三类别检测,在几千多张车辆三类别数据集中训练得到,我们训练了YOLOv7、,所有指标都是在同一个验证集上得到; 2、目标类别数:3;类别名:car、bus…

【蓝桥杯选拔赛真题29】python堆砖块 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python堆砖块 一、题目要求 1、提示信息 1、编程实现 2、输入输出

WindowsServer域控的安装与卸载

搭建域服务器 1.安装域控 打开服务器管理器, 点击右上角的管理, 选择添加角色和功能 一直点击下一步,直到选择服务器角色处, 勾选Active Directory域服务器 一直下一步,然后点击安装 安装完毕后将此服务器提升为域控制器 自行设置DSRM的密码, 后面一直点击下一步直…

【优化调度】遗传算法求解公交车调度排班优化问题【含Matlab源码 2212期】

⛄ 一、 遗传算法简介 1 引言 公交排班问题是城市公交调度的核心内容,是公交调度人员、司乘人员进行工作以及公交车辆正常运行的基本依据。行车时刻表是按照线路的当前客流量情况,确定发车频率,提供线路车辆的首、末车时间。它是公交企业对社会的承诺,决定着为乘客服务的水平,…

2023-2028年中国花炮行业市场供需与投资预测分析报告

本报告由锐观咨询重磅推出,对中国花炮行业的发展现状、竞争格局及市场供需形势进行了具体分析,并从行业的政策环境、经济环境、社会环境及技术环境等方面分析行业面临的机遇及挑战。还重点分析了重点企业的经营现状及发展格局,并对未来几年行…

【Java 设计模式】简单工厂模式 静态工厂模式

简单工厂模式 & 静态工厂模式1 简单工厂模式1.1 角色1.2 点咖啡案例1.2.1 类图1.2.2 实现1.3 优点1.4 缺点2 静态工厂模式2.1 代码变动2.2 优点1 简单工厂模式 简单工厂模式并不属于 23 种设计模式。 1.1 角色 抽象产品:定义产品的规范,描述产品的…

相控阵天线(七):常规平面阵列分布(矩形阵列、三角栅格、六边形阵列和圆形阵列)

目录简介矩形栅格平面阵列三角栅格平面阵列六边形阵列圆形平面阵列空心平面阵列简介 常见的平面阵有一些基本类型,按照栅格形式可以进行以下划分:矩形栅格、三角形栅格、同心圆环和椭圆环栅格等;按照边界形式可以进行以下划分:矩…

React Native Webview 中input type=file accept=“image/*“ 无法调起相机问题排查及解决

最近在写一个react native 项目&#xff0c;其中react-native-webview库一些使用着实遇到了不少问题&#xff0c;耗时比较长&#xff0c;现在和大家分享一下。 图片上传时选择拍照是很常见的功能&#xff0c;写的h5项目一直调用正常。使用方式大概如下&#xff1a; <input…

【数据结构】—— 双链表的增删改查

❤️一名热爱Java的大一学生&#xff0c;希望与各位大佬共同学习进步❤️ &#x1f9d1;个人主页&#xff1a;周小末天天开心 各位大佬的点赞&#x1f44d; 收藏⭐ 关注✅&#xff0c;是本人学习的最大动力 感谢&#xff01; &#x1f4d5;该篇文章收录专栏—数据结构 目录 双…

艾美捷小鼠肿瘤坏死因子α-ELISpot试剂盒使用指南

ELISpot Plus for enumeration of cells secreting TNF-α This kit is ideal for users who want a convenient and sensitive assay. The assay is designed for the enumeration of cells secreting mouse TNF-α. The kit includes ELISpot plates pre-coated with monocl…

[附源码]计算机毕业设计JAVA面试刷题系统

[附源码]计算机毕业设计JAVA面试刷题系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

【C++】--模拟实现vector

文章目录Constructors(构造函数)myvector()myvector(int n, const T& val T())myvector(InputIterator first, InputIterator last)拷贝构造交换函数myvector< T >& operator(myvector< T > v)迭代器扩容reserveresize插入和删除push_backpop_backinserte…