es6中的函数参数

es5中默认参数写法与es6中默认参数写法

es6之前采用变通方法

function f(x, y, z) {
      y=y||7;
      z=z||42;
        return x + y + z;
    }
console.log(f(1));    //50

console.log(f(1,"",0));    //50

存在问题:这种写法缺点 如果y参数有没有赋值,如果没有,则指定默认值7,如果y赋值了  但是对应的布尔值为false,则该赋值不起作用

如果传入为0时 判断时布尔值为false    结果还是50


function f(x, y, z) {
y=y||7;
z=z||42;
return x + y + z;
}
console.log(f(1,0,0));          //50



// es5的写法
{
    function f(x, y, z) {
        if (y === undefined) {
            y = 7;
        }
        if (z === undefined) {
            z = 42;
        }
        return x + y + z;
    }
    console.log(f(1));
}
// es6的写法
{
    function f1(x, y = 4, z = 12) {
        return x + y + z;
    }
    console.log(f1(1));
}

 除了简洁,es6写法还有两个好处 阅读代码的人可以立刻一是到那些参数是可以省略的,不用查看函数体或文档  其次  有利于将来代码优化  及时未来的版本彻底拿到这个参数,也不会导致以前代码无法运行

参数变量是默认声明的  所以不能用let  const再次声明


es6中默认参数名称不能重复(不可有重名)

es6中参数的默认值一定要放在参数最后  因为实参和形参是通过顺序一一对应的


与解构赋值默认值结合使用

 

 

 解构赋值的时候  两边解构形式要完全匹配

 function ajax(url,{
   body="",
   method="GET",
   headers={}
   }={}){
   console.log(method);
 }

ajax("www.baidu.com")

输出   :"GET"

 function ajax(url,{
   body="",
   method="GET",
   headers={}
   }){
   console.log(method);
 }

ajax("www.baidu.com")

输出: 因为没有为对象赋值默认值


函数lenght属性  返回没有指定默认值参数的个数 这是因为length属性的含义是该杉树预期传入的参数个数,默认参数指定默认值以后,预计传入的参数个数就不包括这个参数了,通理  rest参数也不会计入length属性

函数参数生成作用域   一定设置了参数的默认值  函数进行声明初始化时,参数会形成一个单独的作用域(context)等到初始化结束  这个是作用域就会消失

 

 

 返回昵称名字  anonymous:匿名

 

 
原文地址:https://www.cnblogs.com/ddqyc/p/13587929.html