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读取本地excel文档数据的代码
Nov 11 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
Nov 15 Javascript
页面回到顶部的三种实现(锚标记,js)
Oct 01 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
Apr 30 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
Aug 15 Javascript
javascript数组遍历的方法实例分析
Sep 13 Javascript
js设置随机切换背景图片的简单实例
Nov 12 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
Jan 07 Javascript
node.js部署之启动后台运行forever的方法
May 23 Javascript
vue 使用自定义指令实现表单校验的方法
Aug 28 Javascript
JS实现横向轮播图(初级版)
Jun 24 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
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
趣味比赛活动方案
2014/02/15 职场文书
个人实习生的自我评价
2014/02/16 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
钢琴师观后感
2015/06/12 职场文书
Python基础之数据结构详解
2021/04/28 Python
element多个表单校验的实现
2021/05/27 Javascript
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js