文章目录
一、Javascript函数
1.1 带参数默认值的函数
JS函数的独特之处是可以接受任意数量的参数,而无视函数声明处的参数数量。这让你定义的函数可以命名用不同的参数数量来调用,调用时未提供的参数经常会使用默认值来代替。
// 在ES5中模拟参数默认值
function func01(url, timeout,callback){
timeout = timeout || 2000
callback = callback || function(){
}
// 函数的余下部分
}
// timeout与callback实际上都是可选参数,因为他们都会在参数未被提供的情况下使用
// 默认值。逻辑或运算符(||)在左侧的值为假的情况下总会返回右侧的操作数。由于函数
// 的具名参数在未被明确提供时会是undefined,逻辑或运算符就经常被用来给缺失的参数
// 提供默认值。不过此方法有个瑕疵,在此处的timeout的有效值实际上有可能是0,但是
// 因为0是假值,就会导致timeout的值在这种情况下会被替换为2000.
// 可使用更安全的替代方法实现
function func02(url, timeout, callback){
timeout = (typeof timeout !== 'undefined') ? timeout : 2000
callback = (typeof callback !== 'undefined') ? callback : function(){
}
// ......
}
// ES6中的参数默认值
// ES6能更容易地为参数提供默认值,它使用了初始化形式,以便在参数未被正确传递进来时使用
function func03(url, timeout=2000, callback=function(){
}){
//......
}
let value = 5
function getValue(){
return value++
}
function add(first, second=getValue()){
return first + second
}
console.log(add(1, 1)) //2
console.log(add(1)) //6
console.log(add(1)) //7
代码讲解
将函数调用作为参数的默认值时需要小心,如果你遗漏了括号,例如在上面盒子中使用
second=getValue,你就传递了对于该函数的一个引用,而没有传递调用函数的结果。
1.2 剩余参数
剩余参数( rest parameter )由三个点( … )与一个紧跟着的具名参数指定,它会是包含传递给函数的其余参数的一个数组,名称中的“剩余”也由此而来。
剩余参数的限制条件
剩余参数受到两点限制。一是函数只能有一个剩余参数,并且它必须被放在最后。
function func01