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 创建书签小工具之理论
Feb 25 Javascript
Javascript加载速度慢的解决方案
Mar 11 Javascript
jQuery中insertBefore()方法用法实例
Jan 08 Javascript
浅析JS运动
Dec 28 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
使用Node.js搭建静态资源服务详细教程
Aug 02 Javascript
json2.js 入门教程之使用方法与实例分析
Sep 14 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
Sep 17 Javascript
基于Node.js实现压缩和解压缩的方法
Feb 13 Javascript
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
对layui中表单元素的使用详解
Aug 15 Javascript
js代码实现轮播图
May 04 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
SONY ICF-F10中波修复记
2021/03/02 无线电
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
PHP动态变静态原理
2006/11/25 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
$()JS小技巧
2007/07/21 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
模仿password输入框的实现代码
2016/06/07 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
原生JavaScript实现换肤
2021/02/19 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
文明礼貌演讲稿
2014/05/12 职场文书
岳庙导游词
2015/02/04 职场文书
刘公岛导游词
2015/02/05 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
六年级作文之预言作文
2019/10/25 职场文书