es6-函数
来源:互联网 发布:云网络验证 编辑:程序博客网 时间:2024/06/05 11:46
参考以下博客,建议查看原博客,它更为详细;
ES6 阮一峰
参数的默认值
可以为函数的参数设定默认值;
function a (b=5){console.log(b);}a(); //5a(1); //1
上面的代码意思为;如果函数a被调用时,掺入了参数,那么参数b=传入的参数;如果没有传入参数,那么参数b=5;
注意参数是默认被声明的,不允许重复声明;
function a (b=5){let b = 'xyd';console.log(b);}a(); //报错a(1); //报错
函数a的参数 b已经被默认声明过,let b时,就会报错;(var是可以,let和const都不允许重复声明变量);
函数的参数名不允许重复;
function a (a,b,b){ console.log(a,b,b);}a(1,2,3); //报错
如果函数的参数默认值是一个变量,当调用函数时,就是重新计算参数默认的值;
if(true){ let y = 1; function a(x=y+1){ console.log(x) } a(); //2 y = 2; a();//3}
上面的代码: 函数a的参数 x 的默认是 y+1,而y是一个变量;当调用a时,它的参数x的默认就会重新计算,而不是默认为2( y+1 =2);
所以第一调用时x = 2;
第二次调用时,这时的y=2;y+1=3;所以运行结果是3;这表示如果函数的参数默认值是一个变量,当调用这个函数时它的参数默认值就会重新计算;
函数参数与解构赋值,默认值
与对象解构赋值
function xyd({a,b}={a:1,b:2}){ console.log(a,b) } xyd({a:5, b:6}); //5,6 xyd({a:4}); //4,undefiend xyd({}) // undefiend,undefiend; xyd() //1,2
这里的函数参数的默认值是一个具体的对象属性,没有使用对象解构赋值的默认值;
xyd ( {a:5, b:6 } ); a被赋值为5,b被赋值为6;
xyd ( {a:4 } ); a被赋值为4,这里的参数a和b都是对象解构赋值,b没有解构成功,undefiend;
xyd( { }); 传入了一个空对象,这里a和b都没有解构成功;undefiend;
xyd( ); 执行 {a,b}={a:1,b:2} ,解构成功,//1,2
与对象解构赋值的默认值,与上面的区别是,它设置了对象解构赋值的默认值;
function xyd({a=1,b=2} = {} ) { console.log(a,b);}xyd(); //1,2 没有传值;a和b的默认值为1,2xyd({}); //1,2 传入一个空对象,因为设置了解构对象赋值的默认值,所以这里a=1,b=2;xyd({a:3});//3,2 只传入了a,b因为设置了解构对象赋值的默认值,所以b=2;xyd({a:5,b:6}); //5,6 a和b赋值
函数参数的默认位置
如果设置了函数参数的默认值,它应该在函数参数的尾部,这样也容易看出省略了哪些参数;
如果设置了函数参数的默认值,不是在函数参数的尾部,那么这个参数在调用时,就无法被省略;
function xyd(x=1,y){ console.log(x,y);}xyd(,2)//报错,不能省略参数x;
## 函数的Length ##
h函数的Length 返回函数参数的长度;注意:如果参数设定了默认值,那么length将不包含这个参数;
console.log((function (a,b){}).length); //2console.log((function (a,b=1){}).length)//1,参数b设定了默认值,length不将不会包含它;
## 参数的作用域 ##
z当实行函数时,它的参数就会形成以个单独的作用域;
var x='xyd';function xyd(x=1,y=x){ console.log(y);}xyd();//1;
当运行函数xyd()时,参数形成了一个单独的作用域;y指向参数x(x=1),
而不是指向var x=’xyd’
var x = 1;function xyd(x, y = function() { x = 2; }) { var x = 3; y(); console.log(x);}foo(); //3console.log(x);//1
上面的函数xyd运行时,它的参数形成了自己的作用域,参数y的默认值函数中x指向了参数x,而xyd函数内部又声明了一个变x,当运行y时,由于它的x指向的是参数x,参数形成了自己的作用域,修改的是参数x的值,而不是xyd函数内部声明的x,所以运行结果是3;
而在函数xyd()外面打印的x指向是var x= 1;所以这里的打印结果是1;
如果把函数xyd()内部声明的变量x去掉,这时候打印的x就是参数y中赋值的变量x=2;也就是参数x;运行y后,参数x的值为2;打印结果为2;
var x = 1;function xyd(x, y = function() { x = 2; }) { y(); console.log(x);}foo(); //2console.log(x);//1
- ES6--函数
- es6-函数
- 【es6】函数
- ES6 Generator函数
- ES6--函数扩展
- es6的Generator函数
- es6函数的扩展
- ES6 中的箭头函数
- ES6 箭头函数 柯里化
- ES6箭头函数=>
- es6箭头函数
- ES6箭头函数
- ES6箭头函数小结
- es6 javascript 函数绑定
- es6箭头函数
- ES6 箭头函数
- ES6中的Generator函数
- ES6 函数扩展
- Java---SpringMVC注解
- 关于Git的入门操作(安装、提交代码至仓库)
- phpmyadmin登陆后出现 Array to string问题
- 参考coupon开发cardcoupon-2
- Hashtable的实现原理
- es6-函数
- 51Nod 独木舟
- C++网站开发MVC框架TreeFrog Framework教程——7.ERB模板
- angularjs $http实现get和post请求
- int strlen(char *p);的实现(不开辟任何空间)
- 如何在串口调试助手上,使用printf()函数显示十进制的数据及汉字说明(c语言版)
- VUE —— 结构渲染
- Python闭包、函数式编程、装饰器深入理解
- 最经济synchronized锁对象