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

ECMAScript6语法:默认参数和rest参数

1、默认参数

默认参数即在定义函数的参数列表中指定了默认值的参数。在 ES5 中,并没有提供在参数列表中指定参数默认值的语法,要想为函数的参数指定默认值,只能在函数体中实现,示例代码如下:

function table(width, height, rows, cols){width = width || 300;height = height || 200;rows = rows || 6;cols = cols || 3;
}

在 ES6 中,简化了为参数设置默认值的方法,可以直接在参数列表中设置参数的默认值,示例代码如下:

function table(width=300, height=200, rows=6, cols=3){//函数体
}

在调用 table() 函数时,如果没有传递实参,则使用4个参数的默认值;如果传递了一个实参,则使用后3个参数的默认值;如果传递了4个实参,则不使用默认值。

2、rest 参数

在 JavaScript 中,无论在定义函数时设置了多少个形参,在调用函数时都可以传入任意数量的实参,在函数内部可以使用 arguments 对象获取传入的实参。

【实例】定义一个获取最大值的函数。

function compare(){let maxValue = 0;for(let i = 0; i < arguments.length; i++){if(arguments[i] > maxValue){maxValue = arguments[i];}}return maxValue;
}
document.write(compare(3,7,6,9,2,5)); //输出结果:9

在 ES6 中引入了 rest 参数,在函数的形参前添加3个点,就表示这是一个 rest 参数。例如,将上述代码修改为使用 rest 参数的形式,代码如下:

function compare(...args){let maxValue = 0;for(let i = 0; i < args.length; i++){if(args[i] > maxValue){maxValue = args[i];}}return maxValue;
}
document.write(compare(3,7,6,9,2,5)); //输出结果:9

在定义函数时设置的参数列表中,普通参数和 rest 参数可以同时存在。如果既有普通参数也有 rest 参数,那么 rest 参数必须放到参数列表的最后面的位置。

【实例】定义一个获取个人信息的函数,在参数列表中即有普通参数也有 rest 参数,通过调用函数来获取个人信息。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>获取个人信息</title>
</head>
<body>
</body>
<script type="text/javascript">function person(name, sex, ...interest) {let info = "";info += "姓名:" + name;info += "<br>性别:" + sex;info += "<br>兴趣爱好:";//遍历rest参数for (let i = 0; i < interest.length; i++) {info += interest[i] + " ";}return info;//返回个人信息}document.write(person("Tony", "男", "看书", "运动", "听音乐"));
</script></html>

执行结果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 模型训练坎坷路--逐步提升模型准确率从40%到90%+
  • redis命令学习
  • 构建Docker镜像时,遇到从`deb.debian.org`下载软件包速度很慢
  • [论文笔记]ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
  • 软考:软件设计师 — 13.数据结构
  • 【社区团购系统设计】
  • apache huidi 时间旅行Time Travel)机制
  • QT:QTableWidget 如何设置列的对齐方式?
  • git的下载与安装(Windows)
  • linux :date 命令增减时间及修改系统时间和机器时间
  • django之反向关系查询<related_model>_set/related_name
  • ArcGIS Pro 实现人口分布栅格TIFF数据的网格提取与可视化
  • 硬件面试经典 100 题(71~90 题)
  • 25届最近4年厦门大学自动化考研院校分析
  • Java面试题———分布式篇
  • ComponentOne 2017 V2版本正式发布
  • Hibernate最全面试题
  • JavaScript设计模式系列一:工厂模式
  • Just for fun——迅速写完快速排序
  • Laravel 中的一个后期静态绑定
  • Python学习之路16-使用API
  • 从tcpdump抓包看TCP/IP协议
  • 聊聊sentinel的DegradeSlot
  • 前嗅ForeSpider中数据浏览界面介绍
  • 区块链将重新定义世界
  • 什么是Javascript函数节流?
  • 思维导图—你不知道的JavaScript中卷
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 我看到的前端
  • 原生JS动态加载JS、CSS文件及代码脚本
  • elasticsearch-head插件安装
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (007)XHTML文档之标题——h1~h6
  • (2)STM32单片机上位机
  • (2020)Java后端开发----(面试题和笔试题)
  • (7) cmake 编译C++程序(二)
  • (笔记)M1使用hombrew安装qemu
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (三) diretfbrc详解
  • (十三)Flink SQL
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)VC++中ondraw在什么时候调用的
  • (转)甲方乙方——赵民谈找工作
  • (转)母版页和相对路径
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET Remoting学习笔记(三)信道
  • .NET Standard 的管理策略
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .net 流——流的类型体系简单介绍
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)