经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
JavaScript ES6的函数拓展
来源:jb51  时间:2022/1/18 13:28:00  对本文有异议

ES6函数拓展

函数的默认参数

之前的写法:

  1. function count(x, y) {
  2. ?? ?return x + y;
  3. }
  4. count(3);//因为只传递了参数x,y的默认值为undefined
  5. //undefined + 3返回NaN
  6.  
  7. function count(x, y) {
  8. ?? ?x = x || 0;
  9. ?? ?y = y || 0;
  10. ?? ?return x + y;
  11. }
  12. count(3);//3
  13.  
  14. function count(x, y) {
  15. ?? ?x = x??0;
  16. ?? ?y = y??0;
  17. ?? ?return x + y;
  18. }
  19. count(3);//3

ES6写法:

ES6的写法简洁易读,能够让其他开发者快速了解参数类型,是否可省等信息,也不会对函数体代码造成过多负担,有利于后期优化重构

  1. function count(x = 0, y = 0) {
  2. ?? ?return x + y;
  3. }
  4. count(3);

注意事项:

1.使用默认参数,在函数体内不能重新命名同名变量

  1. function count(x = 0, y = 0) {
  2. ?? ?let x;//报错
  3. ?? ?const y;//报错
  4. }

参数默认值不是传值的,而是每次都重新计算默认表达式的值,也就是说参数默认值是惰性求值的

  1. let num = 1;
  2. function count(x = num + 1, y = 0) {
  3. ?? ?return x;
  4. }
  5. count();//2
  6.  
  7. num = 99;
  8. count();//100

参数也可以作为默认值,但是要注意顺序

正确示例:

  1. function fn(x = 10, y = x) {
  2. ?? ?console.log(x, y);
  3. }
  4. fn(20);//20 20
  5. fn();//10 10

错误示例:

  1. function fn(x = y, y = 10) {
  2. ?? ?console.log(x, y);
  3. }
  4. fn();//报错

参数默认值为变量时,如果外部作用域有对应变量,那么这个参数就会指向外部变量(即参数的值等于外部变量的值)

  1. let w = 10;
  2. function fn(x = w) {
  3. ?? ?let w = 20;
  4. ?? ?return x;
  5. }
  6. fn();//10

注意:

  1. //在()阶段,x已经赋值后,再改变w的值,也无法改变x的值
  2. let w = 10;
  3. function fn(x = 2) {
  4. ?? ?w = 20;
  5. ?? ?return x;
  6. }
  7. fn();//10

reset参数

ES6引入reset参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了

reset参数搭配的变量是一个数组,该变量将多余的参数放入数组中

类似解构赋值,以后就不用call来使arguments调用数组方法了

  1. function count(...values) {
  2. ?? ?console.log(values);//[2, 5, 3]
  3. ?? ?return values.reduce((acc,curr) => acc + curr);
  4. }
  5. add(2, 5, 3);//10

reset参数必须作为函数最后一个参数

  1. function count(...value, a){}//报错

name属性

函数的name属性,返回该函数的函数名

  1. function count(){}
  2. console.log(count.name); //"count"
  3.  
  4. (new Function).name // "anonymous"
  5.  
  6. function foo() {};
  7. foo.bind({}).name // "bound foo"
  8.  
  9. function foo() {};
  10. foo.bind({}).name // "bound foo"
  11.  
  12. (function(){}).bind({}).name // "bound " // "bound "
  13.  
  14. (function(){}).name // ""

箭头函数

ES6中规定可以使用“箭头”(=>)定义函数

  1. ------------正常函数-------------
  2. function count(x, y) {
  3. ?? ?return x + y;
  4. }
  5. ------------箭头函数-------------
  6. let count =(x, y) => x + y;

函数体中可以直接书写表达式

  1. let count = (x, y) => {
  2. ?? ?y = 100;
  3. ?? ?x = x * y;
  4. ?? ?return x + y;
  5. }
  6. count(3, 4);//400

()中书写表达式,书写多个短语语句,最后一个“,”之后的值为返回值

  1. let count = (x, y) => (x = 100, y = 10, x + y);
  2. count(3, 4);//110

{}中书写多行语句

  1. //报错 会将{}识别为函数体
  2. let count = id => {id: id, name: "yunjin"};
  3.  
  4. //不会报错
  5. let count = id => ({id: id, name: "yunjin"});

到此这篇关于JavaScript ES6的函数拓展的文章就介绍到这了,更多相关JavaScript ES6 函数 内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号