ES6函数新增了哪些扩展?

2023-11-06

一、参数

ES6允许为函数的参数设置默认值

function log(x, y = 'World') {
  console.log(x, y);
}

console.log('Hello') // Hello World
console.log('Hello', 'China') // Hello China
console.log('Hello', '') // Hello

函数的形参是默认声明的,不能使用let或const再次声明

function foo(x = 5) {
    let x = 1; // error
    const x = 2; // error
}

参数默认值可以与解构赋值的默认值结合起来使用

function foo({x, y = 5}) {
  console.log(x, y);
}

foo({}) // undefined 5
foo({x: 1}) // 1 5
foo({x: 1, y: 2}) // 1 2
foo() // TypeError: Cannot read property 'x' of undefined

上面的foo函数,当参数为对象的时候才能进行解构,如果没有提供参数的时候,变量x和y就不会生成,从而报错,这里设置默认值避免

function foo({x, y = 5} = {}) {
  console.log(x, y);
}

foo() // undefined 5

参数默认值应该是函数的尾参数,如果不是非尾部的参数设置默认值,实际上这个参数是没发省略的

function f(x = 1, y) {
  return [x, y];
}

f() // [1, undefined]
f(2) // [2, undefined]
f(, 1) // 报错
f(undefined, 1) // [1, 1]

二、属性

函数的length属性

length将返回没有指定默认值的参数个数


```javascript
(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2

rest 参数也不会计入length属性

```javascript
(function(...args) {}).length // 0

如果设置了默认值的参数不是尾参数,那么length属性也不再计入后面的参数了

(function (a = 0, b, c) {}).length // 0
(function (a, b = 1, c) {}).length // 1

name属性

返回该函数的函数名

var f = function () {};

// ES5
f.name // ""

// ES6
f.name // "f"

如果将一个具名函数赋值给一个变量,则 name属性都返回这个具名函数原本的名字

const bar = function baz() {};
bar.name // "baz"

Function构造函数返回的函数实例,name属性的值为anonymous

(new Function).name // "anonymous"

bind返回的函数,name属性值会加上bound前缀

function foo() {};
foo.bind({}).name // "bound foo"

(function(){}).bind({}).name // "bound "

三、作用域

一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域

等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的

下面例子中,y=x会形成一个单独作用域,x没有被定义,所以指向全局变量x

let x = 1;

function f(y = x) { 
  // 等同于 let y = x  
  let x = 2; 
  console.log(y);
}

f() // 1

四、严格模式

只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错

// 报错
function doSomething(a, b = a) {
  'use strict';
  // code
}

// 报错
const doSomething = function ({a, b}) {
  'use strict';
  // code
};

// 报错
const doSomething = (...a) => {
  'use strict';
  // code
};

const obj = {
  // 报错
  doSomething({a, b}) {
    'use strict';
    // code
  }
};

五、箭头函数

使用“箭头”(=>)定义函数

var f = v => v;

// 等同于
var f = function (v) {
  return v;
};

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分

var f = () => 5;
// 等同于
var f = function () { return 5 };

var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
  return num1 + num2;
};

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回

var sum = (num1, num2) => { return num1 + num2; }

如果返回对象,需要加括号将对象包裹

let getTempItem = id => ({ id: id, name: "Temp" });

注意点:

  • 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象
  • 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误
  • 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替
  • 不可以使用yield命令,因此箭头函数不能用作 Generator 函数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6函数新增了哪些扩展? 的相关文章

随机推荐

  • 史上最全的maven pom.xml文件教程详解

    原文地址 http www zuidaima com share 1781583829978112 htm
  • 部署Prometheus

    1 解压prometheus压缩包 root node5 tar xf prometheus 2 38 0 linux amd64 tar gz C usr local 2 对压缩后的文件做软连接 root node5 ln sv usr
  • 人工智能技术的应用越来越广,极大促进了无人机产业的发展

    备受关注的第二十三届中国国际高新技术成果交易会 简称 高交会 于12月27日在深圳开幕 本届高交会分别在深圳会展中心 福田 和深圳国际会展中心 宝安 同期举办 吸引了众多优秀展商一展风采 本届高交会采用了 线上 线下 联动的方式 线下展览总
  • Shell脚本基础介绍

    shell基础简介 编写脚本通常使用某种基于解释器的编程语言 而shell脚本不过就是一些文件 我们能将一系列需要执行的命令写入其中 然后通过shell来执行这些脚本 进入Linux系统 Ubuntu 打开终端Terminal 表示普通用户
  • 【深度学习】- NLP系列文章之 1.文本表示以及mlp来处理分类问题

    系列文章目录 1 文本分类与词嵌入表示 mlp来处理分类问题 2 RNN LSTM GRU三种方式处理文本分类问题 3 评论情绪分类 还是得开个坑 最近搞论文 使用lstm做的ssd的cache prefetching 意味着我不能再划水了
  • JS实现一键回到顶部的功能(兼容所有浏览器,超级详细)

    我们在浏览网页的时候 大部分都有一个一键回到顶部的按钮 无论是pc端还是移动端 这个功能都很常见 我在一次面试的时候 也要求手写这个功能 首先我们新建一个空页面 把body的高度设置为3000px 这样做的目的是让浏览器出现滚动条 不然我们
  • 动态数组的实现

    public class MyArrayList
  • 栈与队列 数据结构 C语言

    目录 一 栈 1 类型定义 2 接口函数 3 功能实现 初始化栈 进栈 删除栈顶 出栈 销毁栈 其他功能 一 栈 先进后出 后进先出 1 类型定义 typedef int STDataType typedef struct Stack ST
  • 如何用Python进行大数据挖掘和分析?快速入门路径图!

    大数据无处不在 在时下这个年代 不管你喜欢与否 在运营一个成功的商业的过程中都有可能会遇到它 什么是 大数据 大数据就像它看起来那样 有大量的数据 单独而言 你能从单一的数据获取的洞见穷其有限 但是结合复杂数学模型以及强大计算能力的TB级数
  • main函数参数int main(int argc, char *argv[])解析

    main函数可以不带参数 也可以带参数 这个参数可以认为是 main函数的形式参数 C语言规定main函数的参数只能有两个 习惯上这两个参数写为argc和argv 所以C99标准中规定只有以下两种定义方式是正确的 int main void
  • Redis使用Zset做一个排行榜,当权值一样时,怎么按时间排序

    前言 zset是根据score进行排序 当score相同时 默认按照member的字典序进行排序 案例说明 127 0 0 1 6379 gt zadd t1 2 c 1 b 2 a integer 3 127 0 0 1 6379 gt
  • 关于pytorch的backward()

    pytorch中的loss backward 是梯度反传 计算每一个变量的grad 只是之前在纠结GAN的两个loss什么时候反传 参数什么时候更新的时候 观察到backward 后 内存的存储量下降 原来反传完毕之后 就把中间计算变量都释
  • VS code配置C语言,详细教程,初学者专用(附需要的插件)(win系统)

    vscode配置C语言首先下载vscode 这里我就不多说了 我们自己在使用vscode配置c语言后发现c语言根本就不能运行 是因为我们缺少一个配置c语言的插件需要我们自己下载 因为vscode不提供 这里是插件的链接 需要大家自己去提取
  • Windows10自带远程桌面连接Linux--CentOS的操作系统

    加粗样式看到网上好多的都是关于ubuntu类型的连接 或者就是自己在下个软件去连接Linux 而并非是用自带的 本文将为大家自动rdp去连接 1 默认库不包含xrdp 需要安装epel库 yum install epel release y
  • C++ 子类继承父类纯虚函数、虚函数和普通函数的区别

    C 三大特性 封装 继承 多态 今天给大家好好说说继承的奥妙 1 虚函数 C 的虚函数主要作用是 运行时多态 父类中提供虚函数的实现 为子类提供默认的函数实现 子类可以重写父类的虚函数实现子类的特殊化 2 纯虚函数 C 中包含纯虚函数的类
  • Class Not Found-Maven工程单元测试类报错

    很显然 Class Not Found已经说明了相关的类class文明招不到 这一点可以通过打开target目录的classes文件夹得到印证 该问题原因在在于Maven工程不会自动的为我们给java类进行编译 所以就导致了有时候我们jav
  • rocketMQ记录

    https segmentfault com a 1190000017841402 停止命令 sh bin mqshutdown namesrv sh bin mqshutdown broker
  • excel 计算 分位值

    XLFN QUARTILE EXC Result 1 G G 2 和 PERCENTILE 都可以用来计算一组数据的分位数 但是它们的计算方式略有不同 XLFN QUARTILE EXC Result 1 G G 2 是 Excel 中的一
  • AI之路(二)——关于统计学习(statistical learning)Part 1 概论

    从今日起 正式开启AI之路 在人工智能学习领域 无论机器学习还是深度学习 统计学习是入门的最好参考教材 是不可或缺的 因此 这漫漫求索之路 就从统计学习开始吧 我所选择的是李航所著的统计学习 第二版 计划将我对本书的自学总结或心得 能及时地
  • ES6函数新增了哪些扩展?

    目录 一 参数 二 属性 函数的length属性 name属性 三 作用域 四 严格模式 五 箭头函数 一 参数 ES6允许为函数的参数设置默认值 function log x y World console log x y console