核心提示:es5中模拟默认参数function makeRequest(url, timeout, callback) {timeout = timeout || 2000;callback = callbac...
es5中模拟默认参数
function makeRequest(url, timeout, callback) { timeout = timeout || 2000; callback = callback || function() {} //函数其余部分 }
timeout callback 为可选参数,如果不传入相应的参数,系统会给它们赋予一个默认值。
但是当想给makeRequest函数的第二个形参timeout传入值0,即使这个值合法,也会被视为false值,并最终将timeout赋值为2000,这种情况,更多的选择通过typeof检查参数类型:
function makeRequest(url, timeout, callback) { timeout = (typeof timeout !== "undefined") ? timeout : 2000; callback = (typeof callback !== "undefined") ? callback : function() {} //函数的其余部分 }
在流行的javascript库中均使用类似的模式
es6 中的默认参数值
function makeRequest(url, timeout = 2000, callback = function() {}){ //函数的其余部分 }
只有第一个参数被认为是必填参数,其他两个可选。
//使用timeout callback默认值 makeRequest("/foo") //使用callback默认值 makeRequest("/foo", 500)
声明函数时,可以为任意参数指定默认值,在已指定默认值的参数后可以继续声明无默认值参数。
function makeRequest(url, timeout = 2000, callback){ //函数的其余部分 }
这种情况,只有当不为第二个参数传入值或主动为第二个参数传入undefined时才会使用timeout的默认值,
makeRequest("/foo",undefined, function(body){});