JavaScript基础——函数

函数简介

定义函数

调用函数

函数的参数和返回值

函数参数

1.有形参情况下不传递实参

 2.传递数量少于形参个数的实参

3.传递数量等于形参个数的实参

函数返回值

报错Uncaught SyntaxError: Illegal return statement

返回数字和字符串

返回数组、对象和函数

没有返回值

多个return语句

函数作用域

全局作用域

局部作用域

​编辑

函数传参补充

不能直接使用函数内部的参数

不传递实参直接使用函数

传递实参数量多于形参


函数简介

        在JavaScript中,函数是指可以实现特定功能、重复使用的代码块。

定义函数

        在JavaScript中,用关键字function封装函数。定义函数有三种写法,分别如下:

    <script>// 1) 用function声明sayHello函数function sayHello() {console.log('hello');}// 2) 定义变量接收函数var sayHello2 = function () {console.log('hello2');}// 3)构造函数var sayHello3 = new Function('console.log("hello3")');</script>

        定义一个函数,输出日常生活的句子,代码如下:

        // 1)定义函数function foo() {console.log("-----日常生活---------")console.log("起床")console.log("吃早餐")console.log("上课/上班")console.log("午休")console.log("上课/上班")console.log("下班")console.log("加班")console.log("回家睡觉")console.log("----------------------")}

        再定义一个计算N-M之间随机整数的函数,代码如下:

        function getRandomNum(N, M) {return Math.floor(Math.random() * (M - N + 1) + N);}

        其他获取随机数的代码可以参考博客:JavaScript基础——数学对象-CSDN博客

调用函数

        使用函数的步骤分为定义函数、调用函数,函数必须要调用,代码块才能执行。调用函数的语法如下:

函数名称(参数[可为空]);

        调用我们上面定义的foo函数,代码如下:

        // 2)调用函数foo();

函数的参数和返回值

        在JavaScript中,函数可以函数可以接收参数,执行相应的操作,并返回结果,参数和返回是自定义的。

函数参数

        定义函数时,可以在函数名称后面用()定义参数,记作:

    function 函数名(参数1,参数2,...参数n){代码块;
}

        函数名后括号内的参数称为形式参数,简称形参,调用函数时传递的参数,称为实际参数,简称实参。

    //定义函数function 函数名(形参1,形参2,...形参n){代码块;
}// 调用函数函数名(实参1,实参2,...实参3);

        函数传递参数的过程可以理解为将变量赋值,相当于赋值操作,如图:

         

        函数可以定义零个或多个参数,语法如下:

        // 含参(带有参数)的函数function getRandomNum(N, M) {return Math.floor(Math.random() * (M - N + 1) + N);}// 不含参(不带有参数)的函数function sayHello() {console.log('hello');}

        调用函数时,可以传递与参数数量相等或更少的参数(如果函数定义了默认参数值,则返回默认值,如果没有定义默认值,则返回undefined)。

        定义add函数,设置两个参数a和b,a没有默认值,b有默认值2。

        function add(a, b = 2) {console.log("a:" + a, "b:" + b);}

        分为以下情况传递参数:

1.有形参情况下不传递实参

        在不传递参数的情况下,如果函数有默认值,则传递默认值,如果没有默认值,则传递undefined,代码输出a:undefined b:2

 2.传递数量少于形参个数的实参

        函数会将参数给按顺序传递,只传递一个参数,就会值传递给第一个形参,也就是a,第二个参数b有默认值,所以b被赋值默认值2,代码输出a:1 b:2

3.传递数量等于形参个数的实参

        函数会将参数给按顺序传递,传递的实参数量和形参相等,a被赋值1,b被赋值3,代码输出a:1 b:3

        function add(a, b = 2) {console.log("a:" + a, "b:" + b);}add(1, 3);

        整体代码

        function add(a, b = 2) {console.log("a:" + a, "b:" + b);}add();add(1);add(1, 3);;

函数返回值

        函数可以使用return关键字来返回一个值,这个值可以是数字、字符串、布尔值等基本数据类型,也可以是对象、数组等引用数据类型,还可以返回一个表达式、函数等。

        return后面的值就是返回值,就是函数调用后返回的结果。调用函数,函数执行操作后,才能得到返回值。

        return有返回值作用,也有终止代码的作用,写多个return语句,只会返回第一个返回值。

报错Uncaught SyntaxError: Illegal return statement

        return语句只能在函数作用域中使用,不能在全局环境下使用,否则会报错Uncaught SyntaxError: Illegal return statement,意思是非法返回语句,因为在全局环境下不能定义返回语句。

返回数字和字符串

        定义两个函数,分别返回数字和字符串,调用函数在控制台输出返回值,查看返回值的类型,可以发现是number和string类型。

        // 返回值为数字的函数function returnNum() {return 1;}console.log(returnNum());// 返回值为字符串的函数function returnStr() {return 'hello';}console.log(returnStr());console.log(typeof returnNum());console.log(typeof returnStr());

返回数组、对象和函数

        返回数组、对象和函数,可以得到返回的数据,检测类型,分别为对应的类型,访问数组的第一个数据,对象的指定属性,调用函数。

        // 返回数组function returnArr() {return [1, 2, 3];}console.log(returnArr());console.log(typeof returnArr());// 获得数组第一个元素console.log(returnArr()[0]);// 返回对象function returnObj() {return {name: '张三',age: 18}}console.log(returnObj());console.log(typeof returnObj());// 获得对象的name属性console.log(returnObj().name);// 返回函数function returnFun() {return function () {console.log('hello');}}returnFun()();

没有返回值

        如果没有使用return,函数默认返回undefined。

        // 没有返回值function sayHello() {var a = 1;}console.log(sayHello())

多个return语句

        return有返回值作用,也有终止代码的作用,写多个return语句,只会返回第一个返回值。

函数作用域

        函数作用域是指变量和函数声明在代码中可见的区域,就是代码可执行的环境。函数作用域包括全局作用域和局部作用域。

全局作用域

        在全局环境下(函数外部)声明的变量是全局变量,是可以被共享的。 

        在全局环境下定义一个变量num,值为100,可以输出变量num的值,定义函数f()输出num,函数f()也可以输出num的值。

局部作用域

        在函数内部声明的变量是局部变量,是私有的,只能在函数内部被访问(使用)。

        在不同的函数内部定义一个局部变量count,对变量进行不同的操作(给第一个函数进行+100的操作,第二个函数进行-100的操作),可以发现变量的操作是相互独立的,也就是说变量之间的操作不会冲突,因为局部变量是私有的。

        在全局环境下输出变量,会报错ReferenceError: count is not defined,意思是count变量未定义,这是因为定义在局部的变量在全局环境下不存在,局部变量不能在全局环境下使用。

        整体代码

        // 定义变量var num = 100; // 全局变量/全局作用域(共享)console.log(num);function f() {console.log(num);}f();// 函数作用域:代码块可执行的环境 { }function foo() {// 局部变量(私有)var count = 200;count -= 100;console.log(count);}// 调用函数foo();// 局部变量不会冲突function boo() {// 局部变量(私有)var count = 200;count += 100;console.log(count);}// 调用函数boo();// 因为全局环境下根本没有 count 这个变量console.log(count);  // undefined

函数传参补充

        前面我们提到,函数名后的参数称为形参(形式参数),调用函数时传入的参数称为实参(实际参数),实参和形参是一一对应的,接着结合作用域进行补充。

        传递参数可以让代码块的使用更灵活

不能直接使用函数内部的参数

        定义函数num(a),此时a和b是形参,是局部变量,只能在函数作用域中使用,也就是说,在全局环境下我们不能在未定义的情况下,直接使用a,会报错ReferenceError: a is not defined,意思就是a没有定义,全局环境下没有a这个变量。有形参,没有传递实参,形参缺少值,是undefined。

不传递实参直接使用函数

        定义函数add(a,b),不传入参数直接调用,相当于传入undefined,undefined进行相加,会返回NaN(非数字)。

传递实参数量多于形参

        在JavaScript中,arguements对象是一个类数组对象,它提供了访问一个函数调用中实参列表的机制。这个对象在函数体内部可用,并且包含了函数调用时传递的所有参数。尽管它看起来像一个数组,但它并不是一个真正的数组,因此它不具备数组的某些方法,比如pop、push、slice等。

        定义函数,打印arguements数组,可以返回传入的参数,返回数组索引值为0的函数。有实参没有形参,代码不会报错。

        定义函数add(a,b),函数的实参和形参是一一对应的,传入三个参数,函数只取前两个参数进行计算,函数不会报错,但多传入的参数不会起作用。

        返回arguements数组,可以发现函数有三个参数。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx服务部署及其平滑升级

概述 1. 7层负载均衡&#xff08;nginx&#xff09; 1. 停掉4层的环境 systemctl disable --now keepalived.service # 停用之前的4层协议方式2. 源码安装nginx tar zxf nginx-1.22.1.tar.gz 具体方式是源码编译“三部曲” ./configure # 负责检查环境&#xff0c;生成指导…

JAVA实现GB/T 32960.3—2016电动汽车远程服务与管理系统技术规范 第3部分:通信协议及数据格式

完整的TCP服务端解析代码 1.maven依赖 不要的依赖自行删除&#xff0c;懒的删了 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…

Jenkins持续集成工具学习

一、从装修厨房看项目开发效率优化 二、持续集成工具 三、JavaEE项目部署方式对比 四、JenkinsSVN持续集成环境搭建 五、JenkinsGitHub持续集成环境搭建

8 个最佳 Java IDE 和文本编辑器

从 2024 年使用的最佳 Java IDE 和代码编辑器中进行选择&#xff0c;并提高您的 Java 生产力。 Java 是世界上最流行的编程语言之一&#xff0c;于 1995 年首次推出&#xff0c;它确实践行了“编写一个&#xff0c;随处运行”的座右铭。该语言用途广泛&#xff0c;可用于构建从…

排序算法之希尔排序

title: 希尔排序 date: 2024-7-25 10:48:15 0800 categories: 排序算法 tags:排序算法希尔排序 description: 1959年Shell发明&#xff0c;是简单插入排序的改进版。是一种高效的排序算法&#xff0c;通过分组和逐步缩减增量&#xff0c;使得数组在接近有序的情况下进行最终排…

【docker】dockerfile部署lnmp、docker compose初步

1、dockerfile部署lnmp mkdir /opt/lnmp cd /opt/lnmp mkdir nginx mysql php docker network create --subnet20.0.0.0/24 lnmp-net将wordpress文件夹拷贝到nginx、php文件夹 /opt/nginx/Dockerfile: # 使用官方的nginx镜像作为基础镜像 FROM nginx:latest# 复制默认配置文件…

分销商城小程序系统渠道拓展

线上卖货渠道很多&#xff0c;想要不断提高营收和新客获取&#xff0c;除了自己和工具本身努力外&#xff0c;还需要其他人的帮助来提高商城店铺的整体销量。 搭建saas商城系统网站/小程序&#xff0c;后台上货&#xff0c;设置支付、配送、营销、精美模板商城装修等内容&…

快速解析数据挖掘,最短时间明白什么是数据挖掘------下

信息损失函数 &#xff08;Information Loss Function&#xff09;是衡量在数据转换或处理过程中信息丢失的程度的函数。在数据科学、机器学习和统计学中&#xff0c;信息损失是一个重要的概念&#xff0c;尤其是在数据降维、特征选择、数据压缩和隐私保护等领域。 信息损失函…

数字化营销在公域场景中的无限可能

在如今的商业领域&#xff0c;公域场景为企业提供了广阔的发展空间&#xff0c;而数字化营销则成为了企业在这些场景中脱颖而出的关键利器。 ​ 一、电商平台营销 当企业在淘宝、京东等大型电商平台开设店铺&#xff0c;数字化营销便开始大显身手。 企业不仅能踊跃参与像双十…

【MySQL】explain 执行计划各字段解析

MySQL 如何读写数据&#xff1f;https://blog.csdn.net/weixin_43551213/article/details/140862538 MySQL 索引https://blog.csdn.net/weixin_43551213/article/details/140847916 在上一篇文章中提到了索引&#xff0c;而添加索引是优化 SQL 语句的一个方式&#xff0c;但是…

计算机网络——运输层(进程之间的通信、运输层端口,UDP与TCP、TCP详解)

运输层协议概述 进程之间的通信 运输层向它上面的应用层提供通信服务。 当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&#xff0c;都要使用协议栈中的运输层&#xff1b;而网络核心部分中的路由器在转发分组时只用到下三层的功能。 Q1&#xff1a;我们…

mysql windows安装与远程连接配置

安装包在主页资源中 一、安装(此安装教程为“mysql-installer-community-5.7.41.0.msi”安装教程&#xff0c;安装到win10环境) 保持默认选项&#xff0c;点击”Next“。 点开第一行加号展开一路展开找到“MySQL Server 5,7,41 - X64”点击选中点击一下中间只想右侧的箭头看到…

Attention注意力机制

神经网络注意力机制代码实现 import torch import torch.nn as nn import torch.nn.functional as F# MyAtt类实现思路分析 # 1 init函数 (self, query_size, key_size, value_size1, value_size2, output_size) # 准备2个线性层 注意力权重分布self.attn 注意力结果表示按照指…

简单测试AOP五种增强执行时机

1. 目标方法类&#xff0c;spring代理bean Component public class Test {public void test(){System.out.println("test 目标方法");}public void testException(){throw new RuntimeException();} } 2. 配置类 Configuration ComponentScan EnableAspectJAutoPr…

unity项目打包为webgl后应用于vue项目中(iframe模式)的数据交互

参考文章&#xff1a; 1.Unity打包WebGL: 导入Vue 2.unity文档-WebGL&#xff1a;与浏览器脚本交互 3.unity与vue交互(无第三方插件&#xff09; 目录 一、前期工作1.新建.jslib文件2.新建.cs脚本3. 新建一个Text对象和button按钮对象4.添加脚本空对象UIEvent5.导出unity为w…

Windows配置开机直达桌面并跳过锁屏登录界面在 Windows 10 中添加在启动时自动运行的应用

目录 Win10开机直达桌面并跳过锁屏登录界面修改组策略修改注册表跳过登录界面 在 Windows 10 中添加在启动时自动运行的应用设置系统级别服务一、Windows下使用sc将应用程序设置为系统服务1. 什么是sc命令&#xff1f;2. sc命令的基本语法3. 创建Windows服务的步骤与示例创建服…

CANoe软件中Trace窗口的筛选栏标题不显示(空白)的解决方法

文章目录 问题描述原因分析解决方案扩展知识总结问题描述 不知道什么情况,CANoe软件中Trace窗口的筛选栏标题突然不显示了,一片空白。现象如下: 虽然不影响CANoe软件的使用,但是观感上非常难受,对于强迫症患者非常不友好。 原因分析 按照常规思路,尝试了: 1、重启CAN…

K8S中使用英伟达GPU —— 筑梦之路

前提条件 根据不同的操作系统&#xff0c;安装好显卡驱动&#xff0c;并能正常识别出来显卡&#xff0c;比如如下截图&#xff1a; GPU容器创建流程 containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvid…

MoExtend: 模态和任务扩展调整的新专家

MoExtend: Tuning New Experts for Modality and Task Extension GitHub - zhongshsh/MoExtend: ACL 2024 (SRW) https://arxiv.org/pdf/2408.03511 大型语言模型&#xff08;LLM&#xff09;在各种任务中表现出色&#xff0c;然而其应用范围受限于主要在文本数据上进行训练。…

【vSphere 7/8】深入浅出 vSphere 证书 Ⅰ—— 初识和了解 vSphere证书

目录 引子1. vCenter Server 证书服务1.1 vSphere 安全证书&#xff08;1&#xff09;vSphere 安全证书的类型和有效期 1.2在 vSphere Client 中初识 vSphere 证书&#xff08;1&#xff09;vCenter 8.0.3 的 vSphere Client 界面&#xff08;2&#xff09;vCenter Server 7.0 …