JavaScript ES6的函数拓展


Posted in Javascript onJanuary 18, 2022

ES6函数拓展

函数的默认参数

之前的写法:

function count(x, y) {
    return x + y;
}
count(3);//因为只传递了参数x,y的默认值为undefined
//undefined + 3返回NaN

function count(x, y) {
    x = x || 0;
    y = y || 0;
    return x + y;
}
count(3);//3

function count(x, y) {
    x = x??0;
    y = y??0;
    return x + y;
}
count(3);//3

ES6写法:

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

function count(x = 0, y = 0) {
    return x + y;
}
count(3);

注意事项:

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

function count(x = 0, y = 0) {
    let x;//报错
    const y;//报错
}

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

let num = 1;
function count(x = num + 1, y = 0) {
    return x;
}
count();//2

num = 99;
count();//100

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

正确示例:

function fn(x = 10, y = x) {
    console.log(x, y);
}
fn(20);//20 20
fn();//10 10

错误示例:

function fn(x = y, y = 10) {
    console.log(x, y);
}
fn();//报错

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

let w = 10;
function fn(x = w) {
    let w = 20;
    return x;
}
fn();//10

注意:

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

reset参数

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

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

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

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

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

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

name属性

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

function count(){}
console.log(count.name); //"count"

(new Function).name // "anonymous"

function foo() {};
foo.bind({}).name // "bound foo"

function foo() {};
foo.bind({}).name // "bound foo"

(function(){}).bind({}).name // "bound " // "bound "

(function(){}).name // ""

箭头函数

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

------------正常函数-------------
function count(x, y) {
    return x + y;
}
------------箭头函数-------------
let count =(x, y) => x + y;

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

let count = (x, y) => {
    y = 100;
    x = x * y;
    return x + y;
}
count(3, 4);//400

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

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

{}中书写多行语句

//报错 会将{}识别为函数体
let count = id => {id: id, name: "yunjin"};

//不会报错
let count = id => ({id: id, name: "yunjin"});

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

Javascript 相关文章推荐
JavaScript判断窗口是否最小化的代码(跨浏览器)
Aug 01 Javascript
广泛收集的jQuery拖放插件集合
Apr 09 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
javascript的数组和常用函数详解
May 09 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
Feb 25 Javascript
Vue.js教程之计算属性
Nov 11 Javascript
vue中appear的用法
Aug 17 Javascript
详解微信小程序审核不通过的解决方法
Jan 17 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
基于vue中对鼠标划过事件的处理方式详解
Aug 22 Javascript
原生js实现文件上传、下载、封装等实例方法
Jan 05 Javascript
vue路由的配置和页面切换详解
Sep 09 Javascript
Vue提供的三种调试方式你知道吗
Jan 18 #Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 #Vue.js
html5调用摄像头截图功能
Jan 18 #Javascript
在 HTML 页面中使用 React的场景分析
Jan 18 #Javascript
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 #Vue.js
浅谈JavaScript作用域
Dec 06 #Javascript
JavaScript流程控制(循环)
Dec 06 #Javascript
You might like
怎样去阅读一份php源代码
2009/08/21 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
javascript代码加载优化方法
2011/01/30 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
列举Python中吸引人的一些特性
2015/04/09 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
La Senza官网:北美顶尖性感内衣品牌
2018/08/03 全球购物
环境工程大学生个人的自我评价
2013/10/08 职场文书
库房主管岗位职责
2013/12/31 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python