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() // x = 100;
foo() //

(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

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

最新文章

  1. 50ms延时程序
  2. iconfont-矢量图标字体的运用
  3. CentOS6.4 安装 erlang
  4. c# 回调委托
  5. 编写一个类A,该类创建的对象可以调用方法f输出小写的英文字母表。然 后再编写一个A类的子类B,要求子类B必须继承类A的方法f(不允许重写), 子类B创建的对象不仅可以调用方法f输出小写的英文字母表,而且可以调用子 类新增的方法g输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
  6. Daily Scrum4
  7. 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 7.全局防护盲点的总结上篇
  8. POJ 2570
  9. jquery 书写全选反选功能
  10. wpf动画概述
  11. iOS开发之git学习
  12. js连续赋值、指针
  13. Android多线程下安全访问数据库
  14. SQL Sever数据库中 T-sql语句的使用(增、删、改、查)
  15. ecshop_标签大全
  16. leetcode 104 Maximum Depth of Binary Tree二叉树求深度
  17. 51nod--1174 区间中最大的数 (RMQ)
  18. OSS RFC
  19. 利用mysqldump 实现每天备份方案
  20. tomcat和eclipse-wtp的一些配置

热门文章

  1. 用jmeter进行接口测试(2)
  2. Min-max theorem
  3. creat-react-app生成的项目默认端口号是3000,如何更改?
  4. 【洛谷P1220】关路灯
  5. Python之网路编程之-互斥锁与进程间的通信(IPC)及生产者消费者模型
  6. CMDB表结构设计
  7. Python 日期和时间Ⅱ
  8. php实现hashTable
  9. firebird默认字符在lazarus下乱码问题
  10. go语言系列--输出正弦函数