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 相关文章推荐
页面版文本框智能提示JS代码
Nov 20 Javascript
jquery利用ajax调用后台方法实例
Aug 23 Javascript
TypeScript具有的几个不同特质
Apr 07 Javascript
JavaScript中String.prototype用法实例
May 20 Javascript
Express的路由详解
Dec 10 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
js date 格式化
Feb 15 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 Javascript
Vue动态控制input的disabled属性的方法
Jun 26 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
Sep 27 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
python抽象基类用法实例分析
2015/06/04 Python
Python虚拟环境项目实例
2017/11/20 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
三个python爬虫项目实例代码
2019/12/28 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
python3实现飞机大战
2020/11/29 Python
《商鞅南门立木》教学反思
2014/02/16 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
副总经理任命书
2014/06/05 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
小学教师节活动总结
2015/03/20 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python