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 相关文章推荐
prototype 中文参数乱码解决方案
Nov 09 Javascript
JS实现一个按钮的方法
Feb 05 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
Aug 03 Javascript
vue.js从安装到搭建过程详解
Mar 17 Javascript
简单实现jQuery轮播效果
Aug 18 jQuery
vue实现页面加载动画效果
Sep 19 Javascript
JS实现的集合去重,交集,并集,差集功能示例
Mar 13 Javascript
JS内部事件机制之单线程原理
Jul 02 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
js事件触发操作实例分析
Jun 21 Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 Javascript
使用next.js开发网址缩短服务的方法
Jun 17 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
Python之Numpy的超实用基础详细教程
2019/10/23 Python
什么是python的id函数
2020/06/11 Python
python字典的值可以修改吗
2020/06/29 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
银河香水:Galaxy Perfume
2019/03/25 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
毕业论文评语大全
2014/04/29 职场文书
环境保护建议书
2014/08/26 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python