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与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
Google 地图控件集详解及实例代码
Aug 06 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
微信小程序 scroll-view隐藏滚动条详解
Jan 16 Javascript
Angular4学习笔记router的简单使用
Mar 30 Javascript
Vue项目全局配置微信分享思路详解
May 04 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
May 08 Javascript
Puppeteer 爬取动态生成的网页实战
Nov 14 Javascript
vue插件draggable实现拖拽移动图片顺序
Dec 01 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Apr 20 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 jQuery
浅谈vue中resetFields()使用注意事项
Aug 12 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抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
瀑布流布局代码一例
2014/04/11 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
python3实现磁盘空间监控
2018/06/21 Python
Python实现Linux监控的方法
2019/05/16 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python如何判断IP地址合法性
2020/04/05 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
HTML5实现签到 功能
2018/10/09 HTML / CSS
原装进口全世界:天猫国际
2016/08/03 全球购物
Hotels.com中国区:好订网
2016/08/18 全球购物
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
村级四风对照检查材料
2014/08/24 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
民事起诉书范本
2015/05/19 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP