当前位置: 首页 > news >正文

函数相关概念

4.函数

1.函数的概念

1.什么是函数?
把特点的代码片段,抽取成为独立运行的实体
2.使用函数的好处1.重复使用,提供效率2.提高代码的可读性3.有利用程序的维护
3.函数的分类1.内置函数(系统函数)已经提高的alert(); prompt();confirm();print()document.write(),console.log()等...2.自定义函数
  // 1.作用 2,参数 3.返回值// 计算两个数相加// 定义函数/* function:声明函数必须使用function关键字calc():calc为函数的名称,函数名称要遵循变量的命名规则1.只能以数字,字母,下划线,美元符号$组成2.不能以数字开头3.不能使用关键字和保留总4.严格区分大小写5.驼峰命名法6.见名知意calc(num1, num2):num1 num2为形参,只是一个占位1.它的默认值是undefined2.它是一个局部变量(只能在函数内部使用)return 关键字 返回结果,并且终止函数关键字下一行的代码不会被执行函数不一定要有return ,没有return就表示没有返回值函数的默认返回值是undefinedcalc(100, 200):函数名称+小括号,表示调用函数100,200:实参:实实在在的值,它确实了形参的类型*/function calc(num1, num2) {var res = num1 + num2;return res;}// 调用函数var result = calc(100, 200);console.log(calc(100, 200));

在这里插入图片描述

  • 对于js来说,函数就是把任意一段代码放在一个盒子里面

  • 在我想让这段代码执行的时候,直接执行这个盒子里面的代码

  • 先看一段代码

    //以前的方式
    var sum = 0;for (var i = 1; i <= 100; i++) {sum += i;}console.log(sum);
    //函数,这个{}就是我们那个"盒子"
    function fn(){//这个是我们以前写的代码var sum = 0;for (var i = 1; i <= 100; i++) {sum += i;}console.log(sum);
    }
    

2.函数的定义阶段

  • 定义阶段就是我们把代码放到盒子里
  • 学习怎么放进去,就是书写一个函数
  • 我们有两种定义方式 赋值式声明式

1.定义

声明式调用的时候,可以在定义函数的前面,后面使用

  • 使用function这个关键字来声明一个函数

  • 语法

    function fn(形式参数1,参数2...){逻辑代码块return 结果
    }
    fn()函数名,自己定义
    function 关键字 表示接下来是一个函数
    调用函数
    函数名称(实参)
    
调用的时候,可以在定义函数的前面,后面使用  
console.log(show("哈易玲哈"));````function show(name) {````return "姓名为:" + name;}console.log(show("哈哈"));

赋值式:只能在定义函数的后面调用

  • 其实就是和我们使用var关键字是一个道理

  • 首先使用var关键字定义一个变量,把一个函数当作值直接赋值给这个变量就可以了

  • 语法

    var fn=function(){逻辑代码块
    }
    
只能在定义函数的后面调用 
``var show=function (name) {````return "姓名为:" + name;}console.log(show("哈哈"));

构造函数:

new Function的最后一个参数是函数的代码体

 写法3: 构造函数new Function的最后一个参数是函数的代码体var calc1 = new Function("a", "b","return a+b");console.log(calc1(10, 20));

2.调用一个函数

  • 函数调用直接写**函数名()**就可以了

    注意:定义完一个函数以后,如果没有函数调用,那么写在{}里面的代码没有意义,只有调用以后才会执行

3.调用上的区别

  • 声明式函数,调用可以在定义定义或者定义之后
  • 赋值式函数:调用只能在定义之后

4.函数的参数

​ 1.实参 vs 形参

​ 2.可以不传参 可以不传参

​ 3.形参只能在函数内部去使用

​ 4.实参>形参 多的丢弃

​ 实参<形参 少的undefined

​ 实参=形参 依次传参

5.返回值

  • 函数调用本身也是一个表达式,表达式就应该有一个值出现

  • 现在的函数执行完毕后,是不会有结果出现的

  • return关键字就是可以函数执行完毕一个结果

            /* 注意:1.return 看需求需不要写2.return 后面的代码都不执行*/function add(x, y, z) {var result = x + y + z;return result;}var res = add(1, 2, 3)console.log(res);function test(a) {console.log("传给后端用的," + a);}test(res)
    

3.作用域

 1.什么是函数的作用域和作用域链作用域:作用范围1.函数内部的是局部的2.函数外部的是全局的作用域链:1.当函数内部访问某一个变量的时候,首先去函数内部查找,如果内部没有,就向外部函数查找,如果外层函数,没有就向(浏览器window)全局在node.js是像global上查找,查找这个的过程,就叫做"作用域链"
 function fn() {// 在函数内部,使用var 关键字,声明的变量是局部变量// 在函数内部,没有使用var关键字,声明的变量是全局变量var a = b = 100;}fn();// console.log(a);a is not definedconsole.log(b);//100 注销a  得到100

全局作用域

  • 全局作用域是最大的作用域

  • 在全局作用域中定义的变量可以在任何地方使用

  • 页面打开的时候,浏览器会自动给我们生成一个全局作用域window

  • 这个作用域会一直存在,直到页面关闭就销毁了

    //这两个变量都是存在全局作用域下面的,都是可以在任意地方使用
    var num=100;
    var num1=200
    

局部作用域:

  • 局部作用域就是在全局作用域下面开辟出来一个相对较小的一些作用域
  • 在局部作用域定义的变量只能在这个局部作用域内部使用
  • 在js中只有函数能生成一个局部作用域,别的都不行
  • 每一个函数,都是一个局部作用域

访问规则

  • 当我们想获取一个变量的值的时候,我们管这个行为叫做访问
  • 变量的访问规则,也叫做作用域的查找机制
  • 作用域的查找机制只能是向上找,不能是向下找
  • 获取变量的规则:
    • 首先,在自己的作用域内部查找,如果有,就直接拿来使用
    • 如果没有,就去上一级作用域查找,如果有,就拿来使用
    • 如果没有,就继续去上一级作用域查找,依次类推
    • 如果一直到全局作用域都没有这个变量,那么就会直接报错(该变量 is not defined)

赋值规则

  • 当你想给一个变量赋值的时候,那么就先要找到这个变量,在给他赋值
  • 变量的赋值规则
    • 先在自己的作用域内部查找,有就直接复制
    • 没有就去上一级作用域内部查找,有就直接赋值
    • 还没有再去上一级作用域查找,有就直接赋值
    • 如果一直找到全局作用域都没有,那么直接把这个变量定义为全部变量,再给他赋值

4.arguments

arguments 参数

​ 1.它是一个伪数组,有下标,不具备数据的方法

​ 2.它只能在函数内部出现

​ 作用:动态接收实参

 function calc() {var sum = 0for (var i = 0; i < arguments.length; i++) {// arguments[i]通过索引取得对应位置的值(下标取值)sum += arguments[i];}return sum;}console.log(calc(10, 20));

相关文章:

函数相关概念

4.函数 1.函数的概念 1.什么是函数? 把特点的代码片段,抽取成为独立运行的实体 2.使用函数的好处1.重复使用,提供效率2.提高代码的可读性3.有利用程序的维护 3.函数的分类1.内置函数(系统函数)已经提高的alert(); prompt();confirm();print()document.write(),console.log()…...

2023软考学习营

...

Vue2进阶篇学习笔记

文章目录 Vue2进阶学习笔记前言1、Vue脚手架学习1.1 Vue脚手架概述1.2 Vue脚手架安装1.3 常用属性1.4 插件 2、组件基本概述3、非单文件组件3.1 非单文件组件的基本使用3.2 组件的嵌套 4、单文件组件4.1 快速体验4.2 Todo案例 5、浏览器本地存储6、组件的自定义事件6.1 使用自定…...

Python 正则表达式:强大的文本处理工具

概念&#xff1a; 正则表达式是一种强大的文本匹配和处理工具&#xff0c;它可以用来在字符串中查找、替换和提取符合某种规则的内容。在Python中&#xff0c;使用re模块可以轻松地操作正则表达式&#xff0c;它提供了丰富的功能和灵活的语法。 场景&#xff1a; 正则表达式…...

Linux如何查看系统时间

文章目录 一、使用date命令查看系统时间二、通过/var/log/syslog文件查看系统时间三、通过/proc/uptime文件查看系统运行时间四、通过hwclock命令查看硬件时间五、通过timedatectl命令设置系统时区六、通过NTP协议同步网络时间七、通过ntpstat命令检查NTP同步状态八、使用cal命…...

46. 出勤率问题

文章目录 题目需求实现一题目来源 题目需求 现有用户出勤表&#xff08;user_login&#xff09;如下。 user_id (用户id)course_id (课程id)login_in &#xff08;登录时间&#xff09;login_out &#xff08;登出时间&#xff09;112022-06-02 09:08:242022-06-02 10:09:361…...

Xilinx IDDR与ODDR原语的使用

文章目录 ODDR原语1. OPPOSITE_EDGE 模式2. SAME_EDGE 模式 ODDR原语 例化模板&#xff1a; ODDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT(1b0), // Initial value of Q: 1b0 or 1b1.SRTYPE("SYNC…...

面试系列 - 序列化和反序列化详解

Java 序列化是一种将对象转换为字节流的过程&#xff0c;可以将对象的状态保存到磁盘文件或通过网络传输。反序列化则是将字节流重新转换为对象的过程。Java 提供了一个强大的序列化框架&#xff0c;允许你在对象的持久化和网络通信中使用它。 一、Java 序列化的基本原理 Jav…...

基于Elasticsearch + Fluentd + Kibana(EFK)搭建日志收集管理系统

目录 1、EFK简介 2、EFK框架 2.1、Fluentd系统架构 2.2、Elasticsearch系统架构 2.3、Kibana系统架构 3、Elasticsearch接口 4、EFK在虚拟机中安装步骤 4.1、安装elasticsearch 4.2、安装kibana 4.3、安装fluentd 4.4、进入kibana创建索引 5、Fluentd配置介绍 VC常…...

【Python小项目之Tkinter应用】解决Python的Pyinstaller将.py文件打包成.exe可执行文件后文件过大的问题

文章目录 前言1. 创建新项目![请添加图片描述](https://img-blog.csdnimg.cn/36dcadc85d864a08b93af78b9e79ff6d.jpeg)2.删除原项目中的全部文件3.将要打包的文件放入该项目目录下4.创建虚拟环境5.设置解释器为虚拟环境中的python解释器6.查看是否成功使用虚拟环境中的python解…...

Ab3d.DXEngine 6.0 Crack 2023

Ab3d.DXEngine 不是另一个游戏引擎&#xff08;如Unity&#xff09;&#xff0c;它强迫您使用其游戏编辑器、其架构&#xff0c;并且需要许多技巧和窍门才能在标准 .Net 应用程序中使用。Ab3d.DXEngine 是一个新的渲染引擎&#xff0c;它是从头开始构建的&#xff0c;旨在用于标…...

Wireshark抓包常用指令

1.常用过滤规则 指定源地址&#xff1a; ip.src 10.0.1.123ip.src 10.0.1.123 && udphttp数据链路层&#xff1a;筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26网…...

Docker Swarm

Docker Swarm提供 Docker 容器集群服务&#xff0c;是 Docker 官方对容器云生态进行支持的核心方案。将多个 Docker 主机封装为单个大型的虚拟 Docker 主机&#xff0c;快速打造一套容器云平台。 Swarm mode内置 kv 存储功能&#xff0c;提供了众多的新特性&#xff0c;比如&a…...

jupyter notebook安装和删除kernel的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

中级深入--day16

爬虫(Spider)&#xff0c;反爬虫(Anti-Spider)&#xff0c;反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... Day 1 小黄想要某站上所有的电影&#xff0c;写了标准的爬虫(基于HttpClient库)&#xff0c;不断地遍历某站的电影列表页面&#xff0c;根据 Html 分析电影名字存进…...

【洛谷 P1031】[NOIP2002 提高组] 均分纸牌 题解(贪心)

[NOIP2002 提高组] 均分纸牌 题目描述 有 N N N 堆纸牌&#xff0c;编号分别为 1 , 2 , … , N 1,2,\ldots,N 1,2,…,N。每堆上有若干张&#xff0c;但纸牌总数必为 N N N 的倍数。可以在任一堆上取若干张纸牌&#xff0c;然后移动。 移牌规则为&#xff1a;在编号为 1 …...

E5071C是德科技网络分析仪

描述 E5071C网络分析仪提供同类产品中最高的RF性能和最快的速度&#xff0c;具有宽频率范围和多功能。E5071C是制造和R&D工程师评估频率范围高达20 GHz的RF元件和电路的理想解决方案。特点: 宽动态范围:测试端口的动态范围> 123 dB(典型值)快速测量速度:41毫秒全2端口…...

ViTPose+:迈向通用身体姿态估计的视觉Transformer基础模型 | 京东探索研究院

身体姿态估计旨在识别出给定图像中人或者动物实例身体的关键点&#xff0c;除了典型的身体骨骼关键点&#xff0c;还可以包括手、脚、脸部等关键点&#xff0c;是计算机视觉领域的基本任务之一。目前&#xff0c;视觉transformer已经在识别、检测、分割等多个视觉任务上展现出来…...

Android 播放mp3文件

1&#xff0c;在res/raw中加入mp3文件 2&#xff0c;实现播放类 import android.content.Context; import android.media.AudioManager; import android.media.SoundPool; import android.util.Log;import java.util.HashMap; import java.util.Map;public class UtilSound {pu…...

在OpenStack私有云上安装配置虚拟机

文章目录 零、学习目标一、登录大数据实训云二、创建网络三、创建路由四、添加接口五、创建端口六、添加安全组规则七、创建实例&#xff08;一&#xff09;实例规划&#xff08;二&#xff09;创建实例 - ied&#xff08;三&#xff09;创建实例 - master、slave1与slave2&…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...