SE6 不定参数和默认参数详解和使用细节
在SE5以前我们通常通过arguments类数组对象来引用不定形参,SE6则使用了一种叫做不定参数的写法,比起隐式的arguments要直观的多。
不定参数使用...参数名来指定一个不定参数,参数名指向一个数组,传进来的参数除开指定的形参外,其他的都存在这个数组中。如果调用famlies("Jhon","sily","mery");则others=["sily","mery"]。
function families(father,...others){
alert(father);
for( let name of othres){
alert(name);
}
}
不定参数只能是最后一个参数,函数调用时,前面的参数正常填充,剩余的参数填充到不定形参数组,如果没有多余的参数,则不定形参是一个空数组[],而永远不会是undefined。
不定参数不能有默认值
function familis(father,...others="mery"){}
//SyntaxError: rest parameter may not have a default
标准说不定参数函数体中禁止arguments对象,但是我在最新版火狐上亲测,是没有问题的,现阶段不定参数还没有通用,保留了arguments对象,但为了和未来兼容,建议遵循标准。火狐亲测如下:
(function familis(father,...others){
console.log(arguments[1]);
})("Jon","jil");
//jil
默认参数
SE5以前未传值的参数有undefined进行填充,SE6对此进行了优化,可以指定一个默认参数,如果传入参数则使用实参值,不然使用默认值。
function familis(father="Jhon",mother="mery"){
console.log(father);
console.log(mother);
}
使用默认参数要注意几点:
1、参数表达式从左向右求值
(function familis(father="Jhon",mother=father=="Jhon"? "mery":"bord"){
console.log(father);
console.log(mother);
})()
//Jhon
//mery
2、传递undefined值相当于不传值,还是会调用默认参数。
3、没有默认值的参数默认默认值为undefined。
4、默认参数表达式可以放在没有默认值的参数左边
(function familis(father="Jhon",mother){
console.log(father);
})()
//Jhon
5、函数变量提升
(function familis(father="Jhon"){
function father(){}
return father;
})()
//function father()
SE6 不定参数和默认参数详解和使用细节的更多相关文章
- 深入浅出ES6(五):不定参数和默认参数
作者 Jason Orendorff github主页 https://github.com/jorendorff 不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例 ...
- 深入浅出ES6:不定参数和默认参数
不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例如,String.prototype.concat方法就可以接受任意数量的字符串参数.ES6提供了一种编写可变参函数的新 ...
- (转)Linux内核参数设置sysctl命令详解
Linux内核参数设置sysctl命令详解 原文:https://www.zhukun.net/archives/8064 sysctl是一个允许您改变正在运行中的Linux系统的接口. 它包含一些 ...
- springboot项目--传入参数校验-----SpringBoot开发详解(五)--Controller接收参数以及参数校验----https://blog.csdn.net/qq_31001665/article/details/71075743
https://blog.csdn.net/qq_31001665/article/details/71075743 springboot项目--传入参数校验-----SpringBoot开发详解(五 ...
- python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)
默认参数:定义函数的时候给定变量一个默认值. def num(age=1): 位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用. 关键字参数:如果定义的函数中含有关键字参数,调用函数 ...
- “全栈2019”Java第六十五章:接口与默认方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- ES6中的Rest参数和默认参数
ES6中的Rest参数和默认参数 Rest参数 一个例子 编写一个函数, 用来判断, 某个字符串中, 是否其他的字符串, 如果第一参数以后的字符串, 都包含在第一参数中, 都包含在, 就返回true ...
- Python 必选参数,默认参数,可变参数,关键字参数和命名关键字参数
Py的参数还真是多,用起来还是很方便的,这么多参数种类可见它在工程上的实用性还是非常广泛的. 挺有意思的,本文主要参照Liaoxuefeng的Python教程. #必选参数 def quadratic ...
- python 必选参数、默认参数、可变参数和、关键字参数
转自:https://www.liaoxuefeng.com/wiki/897692888725344/897693568201440 可变参数 在Python函数中,还可以定义可变参数.顾名思义,可 ...
随机推荐
- JPA 注解的CascadeType属性
cascade表示级联操作,在表之间的关系映射时用到 CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象.对应EntityManage ...
- 《Java从入门到放弃》JavaSE入门篇:练习——单身狗租赁系统
今天,我们要玩个大的!!! 我们把之前使用数组做的这个单身狗系统改版成数据库版本,并且使用面向对象里面的一些简单思想.如果有不知道这个系统的看官,请跳转到目录页,然后再选择单身狗系统(数组版)先围观五 ...
- mysql 1093错误
1093错误:修改一个表的时候子查询不能是同一个表 解决办法:把子查询再套一层,变成原来表的孙子查询就可以了 例如: INSERT INTO gg SET id3=(SELECT c.a+1 FROM ...
- Day4 装饰器——迭代器——生成器
一 装饰器 1.1 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多 ...
- PyTorch教程之Autograd
在PyTorch中,autograd是所有神经网络的核心内容,为Tensor所有操作提供自动求导方法. 它是一个按运行方式定义的框架,这意味着backprop是由代码的运行方式定义的. 一.Varia ...
- struts标签与jstl标签互换
近期在做struts切换spring mvc时发现代码中使用了大量的struts标签,对常用的struts标签做了总结,首先需要引入 <%@ taglib prefix="c" ...
- jquery.form.js的重置表单增加hidden重置代码
jquery.form.js的resetForm()方法无法重置hidden元素,打开文件在1460行加上以下代码即可
- EXISTS/NOT EXISTS CASE WHEN等使用方法
--简单判断用法 WHERE EXISTS (SELECT * FROM cpay..System_Setting) --可以替换count ) FROM cpay..System_Setting U ...
- (转)C#中各种集合类比较
数组(Array)的不足(即:集合与数组的区别) 1. 数组是固定大小的,不能伸缩.虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是 ...
- Mysql 学习之EXPLAIN作用
一.MYSQL的索引 索引(Index):帮助Mysql高效获取数据的一种数据结构.用于提高查找效率,可以比作字典.可以简单理解为排好序的快速查找的数据结构.索引的作用:便于查询和排序(所以添加索引会 ...