functionfoo(x, y){
y = y ||'es'// 判断y是否传值
console.log(x,y)}foo('hello','world')foo('hello',0)// 这样就存在问题 其实本意是hello 0// es6中场景适配 // 使用默认值的方式functionfoo(x, y ='world'){
console.log(x,y)}foo('hello')foo('hello',0)// hello 0// 函数内部的参数,不可与形参再次同名functionfoo(x){let x =1// 这种就是存在问题的}// 函数参数的名称也是不可重复functionfoo(x, x, y){// 这种也是不被允许的}// 参数的默认值在参数最后functionfoo(x, x, y =5){}
2. 与解构赋值的结合
// 函数参数解构赋值的时候,对应的结构应该相同functionfoo({x, y =5}){
console.log(x,y)}foo({})// undefined 5foo()// Cannot read property 'x' of undefinedfoo({x:3, y:6})// 3 6functionajax(url,{
body ='',
method ='GET',
headers ={}}){
console.log(method)}ajax('http://www.baidu.com',{method:'POST'})// POST
3. length属性
// 函数的length返回的是没有指定默认值的参数个数functionfoo(x, y, z =6){}
console.log(foo.length)
4. 参数的作用域
let x =1;functionfoo(x, y = x){
console.log(y)}foo(2)// 2let x =1;functionfoo(y = x){let x =2
console.log(y)}foo()// 1functionfoo(y = x){
console.log(y)}foo()// x is not defined