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函数中,还可以定义可变参数.顾名思义,可 ...
随机推荐
- 解决linux AMR转MP3出现转码成功却无法播放的问题
根据帖子:http://blog.csdn.net/z313731418/article/details/50218341 的提示,在linux安装ffmpeg,确实在linux下使用命令可以将am ...
- 关于Tomcat一些启动错误的解决方法
一.Eclipse tomcat 启动超时: 错误内容: Server JBoss v4.0 at localhost was unable to start within 50 seconds. I ...
- GCD之死锁
GCD相当好用,但用不好就会死锁,始终要记着这样一句秘籍: 不要在串行队列放dispatch_sync.dispatch_apply 下面看几个例子 1 2 3 4 5 6 7 8 9 10 11 1 ...
- TCP/IP(五)传输层(TCP的三次握手和四次挥手)
前言 这一篇我将介绍的是大家面试经常被会问到的,三次握手四次挥手的过程.以前我听到这个是什么意思呀?听的我一脸蒙逼,但是学习之后就原来就那么回事! 一.运输层概述 1.1.运输层简介 这一层的功能也挺 ...
- 关于 char 、 wchar_t 、 TCHAR 、 _T() ||| 宏 _T 、 TEXT 、 _TEXT 、 L
char :单字节变量类型,最多表示256个字符,wchar_t :宽字节变量类型,用于表示Unicode字符,它实际定义在<string.h>里:typedef unsigned sho ...
- 关于JQuery全选/反选第二次失效的问题
最近在项目中,遇到一个问题,测试全选/反选功能时,第一次对母框进行选中/非选中时,能同步子框的全选/反选状态,之后再点击母框,子框就没反应了.原代码大致结构关键如下: function selectA ...
- windows访问控制列表 --ACL(Access Control List)
1.定义 ACL是一个windows中的表示用户(组)权限的列表. Access Control List(ACL) Access Control Entry(ACE) ... 2.分类 ACL分为两 ...
- webpack2使用ch1-目录说明
1 目录解释 webpack.config.js:配置文件,配置文件可以改成其他名,但package.json --config文件名称也要对应修改 2 webpack.config.js //we ...
- sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等
--修改字段类型: --alter table 表名 alter column 待修改字段名 待修改字段类型 alter table users alter column userid varchar ...
- ItemsPanelTemplate的用法
项目里想用Silverlight制作工具栏,之前用的是Image和TextBlock完成的,但是代码混乱,在后来版本中突然想到ListBox可以实现这样的效果.使用后效果确实不错.下面是我的笔记 &l ...