es6-函数默认形参

一、 在es6之前,

函数的形参当没有传值时,使用默认值会比较麻烦。

function sum(a, b, c) {
   return a + b + c;
 }
 console.log(sum(10, 1, 2)); //13
 console.log(sum(11, 1, 2));  //14

这里形参b,形参c,想让b默认值传1,c默认值传2;在使用时还要写两遍。
还有一种书写方式(这种方式使用起来很优雅,但函数在书写时也是很麻烦的):

 function sum(a, b, c) {
    b = b === undefined && 1;
   c = c === undefined && 2;
    return a + b + c;
}
console.log(sum(10)) //13
console.log(sum(11))  //14
二、 es6给出了新的方法

在书写形参时,直接给形参赋值,赋的值即是默认值。这样一来,当调用函数时,如果没有给对应的参数赋值(给它的值是undefined),则自动使用默认值

// function sum(a, b = 1, c = 2) {
//     return a + b + c;
// }
// console.log(sum(10))     //13
// console.log(sum(11))    //14

// console.log(sum(10, undefined, undefined))   //13
// console.log(sum(1, undefined, 5))       //7

函数的默认形参也可以是一个表达式

/**
 *创建一个元素
 * @param {*} name 元素的名称
 * @param {*} container 元素的父元素
 * @param {*} content 元素的内容
 */
// function createElement(name, container, content) {
//     const ele = document.createElement(name)
//     if (content) {
//         ele.innerHTML = content;
//     }
//     container.appendChild(ele);
// }

// createElement("div", document.getElementById("container"), "好好练习一下")

在这个例子中,我们可以直接写作:

// function createElement(name = "div", container = document.getElementById("container"), content = "") {
//     const ele = document.createElement(name)
//     if (content) {
//         ele.innerHTML = content;
//     }
//     container.appendChild(ele);
// }

// createElement(undefined, undefined, "好好练习一下")

创建的元素是div,父元素用document.getElementById("container"),方式获得是常用的场景,这样,书写为函数默认形参方便很多。

又及

1 严格模式下arguments和形参是脱离的,非严格模式下是关联的

function test(a, b) {
    console.log("arguments", arguments[0], arguments[1]);
    console.log("a:", a, "b:", b);
    a = 3;
    console.log("arguments", arguments[0], arguments[1]);
    console.log("a:", a, "b:", b);
}

test(1, 2);

在这里插入图片描述
此时是关联的,当形参a被赋值为3,arguments里第一位被关联为3;
使用严格模式:

"use strict"

function test(a, b) {
    console.log("arguments", arguments[0], arguments[1]);
    console.log("a:", a, "b:", b);
    a = 3;
    console.log("arguments", arguments[0], arguments[1]);
    console.log("a:", a, "b:", b);
}

test(1, 2);

在这里插入图片描述
它们不再关联。

在es6中只要给函数加上参数默认值,该函数会自动变为严格模式下的规则,arguments和形参脱离
例如:

function test(a, b = 1) {
    console.log("arguments", arguments[0], arguments[1]);
    console.log("a:", a, "b:", b);
    a = 3;
    console.log("arguments", arguments[0], arguments[1]);
    console.log("a:", a, "b:", b);
}

test(1, 2);

在这里插入图片描述
2. 形参和es6中的let或const声明一样,具有作用域,并且根据参数的声明顺序,存在暂时性死区
例如下面这段代码会报错:

function test(a = b, b) {
    console.log(a, b);
}

test(undefined, 2);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值