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 相关文章推荐
模仿JQuery.extend函数扩展自己对象的js代码
Dec 09 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
Nov 26 Javascript
30个经典的jQuery代码开发技巧
Dec 15 Javascript
JavaScript事件 "事件对象"的注意要点
Jan 14 Javascript
node.js cookie-parser 中间件介绍
Jun 06 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
Jun 21 Javascript
微信小程序 配置文件详细介绍
Dec 14 Javascript
深入理解jquery中extend的实现
Dec 22 Javascript
JavaScript寄生组合式继承实例详解
Jan 06 Javascript
微信小程序简单的canvas裁剪图片功能详解
Jul 12 Javascript
JS实现滑动插件
Jan 15 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
Aug 11 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处理json时中文问题的解决方法
2011/04/12 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
php post换行的方法
2020/02/03 PHP
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
Python 多核并行计算的示例代码
2017/11/07 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
中学生学习生活的自我评价
2013/10/26 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
农村党员对照检查材料
2014/09/24 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
医学生自荐信范文
2015/03/05 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js