ES6 函数参数默认值 default
来源:互联网 发布:免备案php空间 编辑:程序博客网 时间:2024/06/01 10:19
参数默认值
基本用法
ES6允许为函数参数设置默认值,即直接写在参数定义后面。
function log(x, y = 'world') { console.log(x, y);}log('Hello'); // Hello worldlog('Hello', 'China'); // Hello Chinalog('Hello', ''); // Hello
ES6的写法非常简洁自然,如下例子:
function Point(x = 0, y = 0) { this.x = x; this.y = y;}var p = new Point();p // {x:0, y:0}
除了简洁,ES6的写法还有两个好处:
- 阅读代码的人,可以立刻意识到哪些参数是可以省略的,不用查看函数体或文档;
- 有利于将来代码的优化,即使未来的版本在对外接口中,彻底去掉这个参数,也不会导致以前的代码无法运行。
参数变量是默认声明的,所以不能用let
或const
再次声明。
function foo(x = 0) { let x = 1; // error const x = 2; // error}
上面代码中,参数变量x
是默认声明的,在函数体中,不能用let
或const
再次声明,否则会报错。
与解构赋值默认值结合使用
函数参数默认值是可以与解构赋值(destructuring)的默认值,结合起来使用。
function foo({x, y = 1}) { console.log(x, y);}foo({}); // undefined 1foo({x: 1}); // 1 1foo({x:1, y: 2}); // 1 2foo(); // TypeError: Cannot match against 'undefined' or 'null'.
上面代码使用了对象的解构赋值默认值,只有当函数foo
的参数是一个对象时,变量x
和y
才会通过解构赋值生成,如果函数foo
调用时参数不是对象,就无法进行解构赋值,从而报错。
参数默认值的位置
通常情况下,定义了默认值的参数,应该是函数的尾参数。因为这样比较容易看出来,到底省略了哪些参数。如果非尾参数设置默认值,其实这个参数是没法省略的。
function f(x = 1, y) { return [x, y];}f(); // [1, undefined]f(1); // [1, undefined]f(,1); // [1, 1]f(undefined, 1); // [1, 1]function func(x, y = 1, z) { return [x, y, z];}func(); // [undefined, 1, undefined]func(1); // [1, 1, undefined]func(1, ,2); // 报错func(1, undefined, 2); // [1, 1, 2]
上面例子中,有默认值的参数都不是尾参数,此时,无法只省略该参数,而不省略它后面的参数,除非显示传入undefined
。
函数的length
属性
函数指定了默认值后,函数的length
属性返回的就不再是函数参数个数,而是第一个指定默认值的前面参数个数。也就是说指定了默认值后,函数的length
属性将失真。
(function(a) {}).length // 1(function(a = 1) {}).length // 0(function(a, b, c = 1, d) {}).length // 2(function(...args) {}).length // 0
这是因为length
属性的含义是,该函数预期传入的参数个数,某个参数指定默认值后,预期传入的参数个数就不包括这个参数及其后面的参数。同时,Rest参数也不会计入length
属性。
作用域
一个需要注意的地方,如果参数默认值是一个变量,则该变量所处的作用域与其它变量的作用域一样,即先是当前函数的作用域,然后才是全局作用域。
应用
利用参数默认值,可以指定某个参数不得省略,如果省略则抛出一个错误。
function throwIfMissing() { throw new Error("Missing parameter");}function foo(mustBeGiven = throwIfMissing()) { return mustBeGiven;}foo(); // Error: Missing parameter
上面代码中foo
函数,如果调用的时候没有给出参数,则会调用默认值throwIfMissing
函数,从而抛出一个错误。
此外,还可以将参数默认值设为undefined
,表明这个参数是可以省略的。
function foo(optional = undefined) { ... }
- ES6 函数参数默认值 default
- ES6 函数参数的默认值
- ES6 参数默认值语法
- ES6-函数的扩展-函数参数的默认值
- ES6学习——新的语法:函数参数默认值
- ES6 函数的参数设置默认值
- 10、函数的扩展 为函数参数指定默认值、函数的 rest 参数、箭头函数—ES6学习笔记
- ES6(六: 函数扩展)(默认值,rest参数,扩展运算符)
- 函数参数的默认值
- 函数参数默认值定义
- java函数参数默认值
- 函数的参数默认值
- java函数参数默认值
- java函数参数默认值
- python函数参数默认值
- 函数参数默认值设置
- es6 函数形参的默认值
- ES6 函数默认值与作用域
- 在Android Studio环境下进行OpenCV开发
- break ,continue ,return 的区别及作用?
- 复数类的实现
- 11g Grid Control安装过程的一些“坑”
- Unity锯齿消除
- ES6 函数参数默认值 default
- Eclipse Java注释模板设置详解
- 解决 安装cocoapods失败,提示 requires Ruby version >=2.2.2
- 通过Google+设置壁纸报错
- hdu 2137 circumgyrate the string
- android开发webview的困惑
- Eclipse中java文件头注释格式设置
- hello world (压测)
- iOS实现视图的映射