ES2015函数扩展 - 函数参数的默认值
来源:互联网 发布:知乎 通信十年 编辑:程序博客网 时间:2024/05/23 19:10
基本用法
在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
这种写法的缺点在于,如果参数y
赋值了,但是对应的布尔值为false
,则该赋值不起作用。就像上面最后一行,参数y
等于空字符,结果该改为默认值。
为了避免这个问题,通常需要先判断一下参数y
是否被赋值,如果没有,再等于默认值
- 1
- 2
- 3
- 1
- 2
- 3
ES6允许为函数的参数设置默认值,即直接写在参数定义的后面
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
可以看到,ES6的写法比ES5简洁许多。
参数变量是默认声明的,所以不能用let
或const
再次声明
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
与解构赋值默认值结合使用
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
上面的代码使用了对象的解构赋值默认值,而没有使用函数参数的默认值。只有当函数foo
的参数是一个对象时,变量x
和y
才会通过解构赋值而生成。否则会报错。
参数默认值的位置
通常情况下,定义了默认值的参数,应该是函数的尾参数。因为这样比较容易看出来,到底省略了那些参数。如果非尾部的参数设置默认值,实际上这个参数是没法省略的。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
函数的length属性
指定了默认值以后,函数的length
属性,将返回没有指定默认值的参数个人。也就是说,指定了默认值,length
属性将失真。
- 1
- 2
- 3
- 1
- 2
- 3
作用域
一个需要注意的地方是,如果参数默认值是一个变量,则该变量所处的作用域,与其他变量的作用域规则是一样的,即先是当前函数的作用域,然后才是全局作用域
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
上面的代码中,参数y
的默认值等于x
。调用时,由于函数的作用域内部的变量x
已经生成,所以y
等于参数x
,而不是全局变量x
。
如果调用时,函数的作用域内部的变量x
没有生成,结果就会不一样
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
上面的代码中,函数调用时,y
的默认值变量x
尚未在函数内部生成,所以x
指向全局变量。
如果此时,全局变量x
不存在,就会报错
0 0
- ES2015函数扩展 - 函数参数的默认值
- ES2015函数扩展 - 函数参数的默认值
- ES2015函数扩展
- ES6-函数的扩展-函数参数的默认值
- 函数参数的默认值
- 函数的参数默认值
- 函数的参数的默认值
- 虚函数参数的默认值
- 关于函数参数的默认值
- C++ 函数参数的默认值
- C++函数参数的默认值
- C++ 函数参数的默认值
- JavaScript函数的参数默认值
- 03 函数参数的默认值
- ES6 函数参数的默认值
- C++函数参数的默认值
- 10、函数的扩展 为函数参数指定默认值、函数的 rest 参数、箭头函数—ES6学习笔记
- 函数参数默认值定义
- Android SwipeRefreshLayout和RecyclerView嵌套时 下拉刷新冲突的解决办法
- ES2015数组拓展 - Array.of()
- 三年java经验应该都会什么
- Apache和Tomcat结合提高性能优化
- Open-Falcon学习之路(1)
- ES2015函数扩展 - 函数参数的默认值
- Oracle Linux Reference Index of Security Vulnerability bug fixes, CVE IDs and Oracle Linux Errata
- mariadb的python连接,远程连接,字符编码问题总结
- 从需求到代码实现的一个思路总结
- php环境变量
- thinkphp中如何定义空操作
- Android开发之————通过代码来得到当前手机屏幕的密度值
- block循环引用
- Java.lang.Comparable接口和Java.util.Comparator接口的区别