参数默认值
未提供参数,或将参数值指定为undefined时,默认值会被使用。
function add(a, b = 2, c = 3){ let result = a + b + c; console.log(result); } add(1); //6 add(1,2); //6 add(1,undefined,4); //7 add(1,null,4);
参数默认值表达式
参数默认值除了是基本类型的值,也可以执行一个函数来产生默认值。
function getValue(){ return 5; } //未提供第二个参数时,getValue()才会被调用 function add(a, b = getValue()){ return a + b ; } console.log(add(1,1)); //2 console.log(add(1)); //6
getValue()函数也可以返回可变的值。
let value = 5; function getValue(){ return value++; } function add(a, b = getValue()){ return a + b ; } console.log(add(1,1)); //2 console.log(add(1)); //6 console.log(add(1)); //7
可以将前面的参数作为后面参数的默认值(反之,后面参数作为前面参数的默认值不行)
function add(a, b = a){ return a + b ; } console.log(add(1,1)); //2 console.log(add(1)); //2
也可以将前面的参数a作为参数传递给一个函数来产生参数b的值。
function getValue(value){ return value + 5; } function add(a, b = getValue(a)){ return a + b ; } console.log(add(1,1)); //2 console.log(add(1)); //7
剩余参数
剩余参数由三个点(...)与一个紧跟着的具名参数指定,它会是包含传递给函数的其余参数的一个数组。
函数只能有一个剩余参数,并且它必须放在最后。
function add(a, ...last){ let b = 0; for(let i=0;i<last.length;i++){ b += last[i]; } return a + b ; } console.log(add(1)); //1 console.log(add(1,2)); //3 console.log(add(1,2,3)); //6
扩展运算符
剩余参数把多个独立的参数合并到一个数组中;扩展运算符则允许将一个数组分割,并将各个项作为分离的参数传给函数。
//Math.max()方法接受任意数量的参数 let a = 25, b = 50; console.log(Math.max(a,b)); //50 //ES5或更早版本 let values = [25,50,75,100]; console.log(Math.max.apply(Math, values)); //100 //扩展运算符 console.log(Math.max(...values));//100
箭头函数
没有参数
var f = () => 'Hello'; console.log(f()); //Hello
一个参数
var f = a => a * a; console.log(f(2)); //4
多个参数
var f = (a,b) => a + b; console.log(f(2,3)); //5
创建立即调用函数表达式
//传统函数 let f1 = function(name){ return { getName: function(){ return name; } } }("f1"); console.log(f1.getName()); //f1 //箭头函数 let f2 = ((name) => { return { getName: function(){ return name; } } })("f2"); console.log(f2.getName()); //f2