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 写的简单进度条控件
Jan 22 Javascript
javascript 文章截取部分无损html显示实现代码
May 04 Javascript
JavaScript学习笔记记录我的旅程
May 23 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
Dec 20 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
JQuery跳出each循环的方法
Apr 16 Javascript
Angular2入门--架构总览
Mar 29 Javascript
浅谈Webpack自动化构建实践指南
Dec 18 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
Jul 17 Javascript
深入了解Vue.js 混入(mixins)
Jul 23 Javascript
vue组件开发之tab切换组件使用详解
Aug 21 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使用mysqldump命令导出数据库
2015/04/14 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
php中使用GD库做验证码
2016/03/31 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
Javascript之String对象详解
2016/06/08 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
python3的输入方式及多组输入方法
2018/10/17 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python函数生成器原理及使用详解
2020/03/12 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
python3中数组逆序输出方法
2020/12/01 Python
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
初三学生个人自我评定
2014/04/06 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
环卫工作汇报材料
2014/10/28 职场文书
幼儿园辞职书
2015/02/26 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python
15个值得收藏的JavaScript函数
2021/09/15 Javascript