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