• ES6标准入门 第五章:函数的扩展


    1、函数参数的默认值 

    (1)基本用法

    ES5 中, 不能直接为函数的参数指定默认值。只能采用变通的方法。

    function log(x, y) {
      y = y || 'World';
      console.log(x, y);
    }
    
    log('Hello') // Hello World
    log('Hello', 'China') // Hello China
    log('Hello', '') // Hello World (错误)

    以上方法虽然可行,但是存在着一定的缺点: 如果参数y 赋了boolean值为false的值,那么该赋值不起作用。

    ES6 允许函数参数设置默认值, 即直接写在参数的后面。

    function log(x, y = 'World') {
      console.log(x, y);
    }
    
    log('Hello') // Hello World
    log('Hello', 'China') // Hello China
    log('Hello', '') // Hello

    除了简洁,ES6 的写法还有两个好处:

      1、阅读代码的人, 可以立即看到哪些参数是可以省略的;

      2、有利于将来的代码优化; (即使未来的版本在对外接口中,彻底拿掉这个参数,也不会导致以前的代码无法运行。)

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

    function foo(x = 5) {
      let x = 1; // error
      const x = 2; // error
    }

    使用参数默认值时,函数不能有同名参数。

    // 不报错
    function foo(x, x, y) {
      // ...
    }
    
    // 报错
    function foo(x, x, y = 1) {   //有默认值时,不能有同名参数
      // ...
    }

    参数默认值是惰性求值的;每次调用都会重新计算表达式的值。

    let x = 99;
    function foo(p = x + 1) {
      console.log(p);
    }
    
    foo() // 100
    
    x = 100;
    foo() // 101

    (2)与解构赋值默认值结合使用

    function foo({x, y = 5}) {
      console.log(x, y);
    }
    
    foo({}) // undefined 5
    foo({x: 1}) // 1 5
    foo({x: 1, y: 2}) // 1 2
    foo() // TypeError: Cannot read property 'x' of undefined

    ---恢复内容结束---

  • 相关阅读:
    java StringBuilder和StringBuffer 用法
    java 包装类
    java 异常机制
    java Scanner类的使用
    java Arrays数组
    java 二维数组和对象数组
    LeaFlet学习之结合turf.js生成简单的等值线demo
    Openlayer给定坐标进行绘制多边形
    LeaFlet学习之GridLayer扩展
    LeaFlet学习之聚合效果
  • 原文地址:https://www.cnblogs.com/james23dong/p/8918626.html
Copyright © 2020-2023  润新知