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 相关文章推荐
用jscript实现列出安装的软件列表
Jun 18 Javascript
简单的代码实现jquery定时器
Nov 17 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
May 23 Javascript
jQuery使用$.ajax进行即时验证的方法
Dec 08 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
Dec 27 Javascript
javascript验证香港身份证的格式或真实性
Feb 07 Javascript
vue脚手架vue-cli的学习使用教程
Jun 06 Javascript
js实现数组和对象的深浅拷贝
Sep 30 Javascript
微信小程序实现弹出菜单功能
Jun 12 Javascript
浅谈ng-zorro使用心得
Dec 03 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
Dec 02 Javascript
JS实现购物车基本功能
Nov 08 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中大于2038年时间戳的问题处理方案
2015/03/03 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
python连接字符串的方法小结
2015/07/13 Python
Python解析json文件相关知识学习
2016/03/01 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
Python中str.format()详解
2017/03/12 Python
python运行其他程序的实现方法
2017/07/14 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
浅谈Python中的字符串
2020/06/10 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
学校十一活动方案
2014/02/01 职场文书
校庆口号
2014/06/20 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript