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 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
js类中的公有变量和私有变量
Jul 24 Javascript
jquery操作select大全
Apr 25 Javascript
jQuery使用height()获取高度需要注意的地方
Dec 13 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
js中flexible.js实现淘宝弹性布局方案
Jun 23 Javascript
浅谈JavaScript中数组的增删改查
Jun 20 Javascript
JS中substring与substr的用法
Nov 16 Javascript
Koa日志中间件封装开发详解
Mar 09 Javascript
详解vue在项目中使用百度地图
Mar 26 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
Sep 21 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 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
提升PHP执行速度全攻略(下)
2006/10/09 PHP
介绍几个array库的新函数 php
2006/12/29 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
Python中decorator使用实例
2015/04/14 Python
python动态参数用法实例分析
2015/05/25 Python
详解Python字符串对象的实现
2015/12/24 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
python使用Geany编辑器配置方法
2020/02/21 Python
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
HEMA法国:荷兰原创设计
2019/02/21 全球购物
创建市级文明单位实施方案
2014/03/01 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript