不定参数和默认参数:

    function containsAll(str) {
for(var i = 1;i < arguments.length;i++) {
var hasStr = arguments[i];
if( str.indexOf(hasStr) == -1 ) {
return false;
}
}
return true;
}
console.log( containsAll("banana","b","nan") );//true
console.log( containsAll("banana","c","nan") );//false

上面例子中使用到了arguments对象,它是一个类数组对象,包含了传递给函数的所有参数。这样的的传参无法看到参数的具体个数,还有参数是从1开始迭代,arguments[0]相当于参数,如果要添加了参数,则必须要重新遍历参数。

es6中的不定参数:

    function containsAll6(str,...needles) {
//alert(needles.length);
for(var needle of needles) {
if(str.indexOf(needle) == -1) {
return false;
}
}
return true;
}
//test...
console.log( containsAll6("banana","b","nan") );// alert() == 2["b","nan"] true

...needles是es6中的信语法,称为不定参数。执行函数后,传进来的第一个参数赋值给str,...neddles不定参所有传递的参数被放到一个数组中,赋值给变量needles。
所有函数中,只有最后一个才可以被标记为不定参数。函数调用时,不定参数前的所有参数正常填充,参数都被放进一个数组中并赋值给不定参数,如果没有额外的参数,不定参数就是个空数组。永远不会是undefined。

默认参数:
通常情况下函数调用者不需要传递是有可能的函数,没有被传递的参数可由感知到的默认参数进行填充。JavaScript有严格的默认参数格式,未被传值的参数默认为undefined。es6引入了一种新的方式,可以指定任意参数的默认值。

    function animalSentence(animals2="tiggers",animals3="bears") {
return `lions and ${animals2} and ${animals3}! oh my!`;
}
console.log(animalSentence());//lions and tiggers and bears! oh my!
console.log(animalSentence("mouse"));//lions and mouse and bears! oh my!
console.log(animalSentence("pig","cat"));//lions and pig and cat! oh my!

默认参数的定义形式:[param1=[defaultValue1],...,paramN=[defaultValueN]],对于每个参数而言,定义默认值时=后面的部分是一个表达式,如果调用者没有传递参数,将使用表达式的值作为默认的参数。
注意细节:
默认值表达式在函数调用是自左向右求值,这也意味着默认表达式可以使用该参数之前已经填充好的其他参数。

    function animalSentencFancy(animals2="tiggers",animals3=(animals2 == "bears")?"sealions":"bears") {
return `lions and ${animals2} and ${animals3}! oh my!`;
}
console.log(animalSentencFancy("bears"));//lions and bears and sealions! oh my! animals3的表达式是一个三元运算
console.log(animalSentencFancy(undefined,"unicorns"));
//lions and tiggers and unicorns! oh my! undefined值等于不传值,没有默认值的参数隐式默认为undefined。
function myFn(a=42,b) {...}//参数是合法的等价与
function myFn(a=42,b=undefined) {...}

deep-in-es6(四)的更多相关文章

  1. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  2. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  3. ES6(四) --- 正则 Number Math

    想学vue了  重启ES6的学习之路 在ES5 中正则的构造器  RegExp  不支持第二个参数 ES6 做了调整   第二个参数表示正则表达式的修饰符(flag) var regex = new ...

  4. ES6(四)字符串的扩展

    1.字符的表示方式 最早在  \u0000-\uFFFF 之间的字符已经足够使用吗,每个字符占两个字节,超出范围,必须使用双字节形式表达, 即每个字符占四个字节.超出范围的字符,会被解读成  \uXX ...

  5. Deep learning:四十九(RNN-RBM简单理解)

    前言: 本文主要是bengio的deep learning tutorial教程主页中最后一个sample:rnn-rbm in polyphonic music. 即用RNN-RBM来model复调 ...

  6. Deep learning:四十八(Contractive AutoEncoder简单理解)

    Contractive autoencoder是autoencoder的一个变种,其实就是在autoencoder上加入了一个规则项,它简称CAE(对应中文翻译为?).通常情况下,对权值进行惩罚后的a ...

  7. Deep learning:四十七(Stochastic Pooling简单理解)

    CNN中卷积完后有个步骤叫pooling, 在ICLR2013上,作者Zeiler提出了另一种pooling手段(最常见的就是mean-pooling和max-pooling),叫stochastic ...

  8. Deep learning:四十四(Pylearn2中的Quick-start例子)

    前言: 听说Pylearn2是个蛮适合搞深度学习的库,它建立在Theano之上,支持GPU(估计得以后工作才玩这个,现在木有这个硬件条件)运算,由DL大牛Bengio小组弄出来的,再加上Pylearn ...

  9. Deep learning:四十三(用Hessian Free方法训练Deep Network)

    目前,深度网络(Deep Nets)权值训练的主流方法还是梯度下降法(结合BP算法),当然在此之前可以用无监督的方法(比如说RBM,Autoencoder)来预训练参数的权值,而梯度下降法应用在深度网 ...

  10. Deep learning:四十一(Dropout简单理解)

    前言 训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择.Dropout是hintion最近2年提出的,源于其文章Improving neural n ...

随机推荐

  1. UVa 140 Bandwidth【枚举排列】

    题意:给出n个节点的图,和一个节点的排列,定义节点i的带宽b[i]为i和其相邻节点在排列中的最远的距离,所有的b[i]的最大值为这个图的带宽,给一个图,求出带宽最小的节点排列 看的紫书,紫书上说得很详 ...

  2. Ubuntu上使用过的命令,Linux常用命令,mount 硬盘挂载, ls 列表list命令,cp 复制copy命令,mkdir 创建文件夹 ,nano 编辑器,cat 文档合并,chmod 文件权限,ssh win10连接ubuntu服务器的步骤

    man 帮助 > man ls # ubuntu的帮助 tar.gz 压缩解压 > tar -zcvf yzn.tar.gz /home/yzn # 压缩 > tar -zxvf y ...

  3. 20180929 北京大学 人工智能实践:Tensorflow笔记02

    https://www.bilibili.com/video/av22530538/?p=16 https://www.bilibili.com/video/av22530538/?p=14 (完)

  4. 题解 CF915D 【Almost Acyclic Graph】

    这道题我第一次的想法是直接判环的数量,然而事实证明实在是太naive了. 随便画个图都可以卡掉我的解法.(不知道在想什么) 这道题的正解是拓扑排序. 朴素的想法是对所有边都跑一次拓扑,但这样$O(m( ...

  5. 题解 BZOJ4919 【大根堆】

    题面:传送门. 老师说今天要考一道线段树合并,然后...然后这道题我就GG了.(当然可以用线段树合并写,只是比较复杂) 有人赛时想了个贪心,然后被机房巨佬hack了,结果在hack的过程中巨佬想出了正 ...

  6. Mysql 锁表 for update (引擎/事务)

    因为之前用过oracle,知道利用select * for update 可以锁表.所以很自然就想到在mysql中能不能适应for update来锁表呢. 学习参考如下 由于InnoDB预设是Row- ...

  7. DATA_PUMP_DIR impdp 指定导出目录

    1.mkdir /tdms1/oracle/dump 2.sqlplus / as sysdba 3.create directory udir as '/tdms1/oracle/dump'; 4. ...

  8. 10 hbase源码系列(十)HLog与日志恢复

    hbase源码系列(十)HLog与日志恢复   HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢 ...

  9. vmware下minimum安装centos后配置网络

    原文出处:http://www.cnblogs.com/lanhj/p/3785553.html 昨晚用vmware安装centos时选择minimum安装,目的熟悉基本配置. 上来想yum一个vim ...

  10. 技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构

    技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构 最近几周Paloalto Networks的研究人员注意到,APT组织Wekby对美国的部分秘密机构展开了一次攻击 ...