ECMAscrip新特性函数介绍

目录
  • 1.函数参数的默认值
    • 1.1函数参数指定默认值
    • 1.2与解耦赋值配合使用
    • 1.3函数参数的作用域
  • 2.rest参数
  • 3.箭头函数
    • 3.1什么是箭头函数
    • 3.2箭头函数的注意事项
  • 4.函数的尾调用

1.函数参数的默认值

1.1函数参数指定默认值

ECMAScript 2015中,允许为函数的参数添加默认值,将默认值直接写在参数的后面即可。

示例代码如下所示:

// 函数参数指定默认值
function fun(a = 1, b = 2) {
  console.log(a + b);
}
fun() // 3

值得注意的是:参数变量是默认声明的,所以不能用let或const再次声明, 否则会抛出异常。

还有就是默认参数的位置都是在参数列表的最后面,否则会引发歧义,该省略的参数不能省略,

如下代码示例:

// 默认参数的位置应该是在最后面
function fun(a = 1, b) {
  console.log(a, b);
}
// 调用函数,传递一个参数
fun(20); // 20 undefined

1.2与解耦赋值配合使用

参数默认值可以与解构赋值的默认值,结合起来使用。可以通过两种方式为其设置默认值。示例代码如下所示:

function fun([a, b = 5] = [3]) {
  console.log(a, b);
}
fun() // 3 5

1.3函数参数的作用域

一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域 。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。

示例代码如下所示:

let x = 5

function fun(y = x) {
  x = 10
  console.log(y);
}
fun() // 5

2.rest参数

ECMAScript 2015引入rest参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

示例代码如下所示:

// 使用 arguments 对象最传入的参数求出最大值
function max1() {
  return Math.max.apply(null, arguments)
}

console.log(max1(1, 5, 6, 33, 65, 35, 15)); // 65

// 使用 rest 参数
function max2(...arg) {
  return Math.max(...arg)
}
console.log(max2(1, 5, 6, 33, 65, 35, 15)); // 65

3.箭头函数

3.1什么是箭头函数

ECMAScript 2015新增了箭头函数(又称胖剪头函数), 相比函数表达式具有较短的语法并以词法的方式绑定this 。箭头函数在大多数情况下都是匿名的。

箭头函数的语法结构如下所示:

// 基本语法结构
(参数1, 参数2, ..., 参数N) => {函数声明}
(参数1, 参数2, ..., 参数N) => 表达式(单一)
// 相当于:(参数1, 参数2, ..., 参数N) => {return 表达式}

// 当只有一个参数时,小可号是可选的
(参数) => {函数声明}
// 或者
参数 => {函数声明}

// 没有参数应该写一对小括号
() => {函数声明}

// 可以配合 rest 参数和默认参数
(参数1, 参数2, ...rest) => {函数声明}
(参数1, 参数2, ..., 参数N = 默认值N) => {函数声明}

箭头函数也可以为其定义函数名,语法结构如下所示:

let funName = (参数1, 参数2, ..., 参数N) => {函数声明}

示例代码如下所示:

let sum = (a, b) => {
  return a + b
}
console.log(sum(10, 20)); //30

3.2箭头函数的注意事项

箭头函数有几个使用注意点:

  • 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

示例代码如下所示:

// ES5 写法
let fun1 = function () {
  console.log(this.id);
}
// ES6 箭头函数写法
let fun2 = () => {
  console.log(this.id);
}

let obj1 = {
  id: 666,
  fun: fun1
}
let obj2 = {
  id: 666,
  fun: fun2
}
obj1.fun() // 666
obj2.fun() // undefined

由代码我们可以看出,普通函数的this是调用时确定的,而我们的箭头函数的this是在定义时就确定了的。

  • 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
  • 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用rest参数代替。

4.函数的尾调用

尾调用是函数式编程的一个重要概念,本身非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。

示例代码如下所示:

let x = (x) => {
  return 2 * x
}

let y = function (y) {
  return x(y)
}

console.log(y(20)); // 40

到此这篇关于ECMAscrip新特性之函数的扩展的文章就介绍到这了,更多相关ECMAscrip函数的扩展内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • ECMAScript6新增值比较函数Object.is

    在这之前我们比较值使用两等号 "==" 或 三等号"===", 三等号更加严格,只要比较两方类型不同立即返回false. 另外,有且只有一个值不和自己相等,它是NaN 现在ES6又加了一个Object.is,让比较运算的江湖更加混乱.多数情况下Object.is等价于"===",如下 1 === 1 // true Object.is(1, 1) // true 'a' === 'a' // true Object.is('a', 'a') //

  • ECMAScript6函数剩余参数(Rest Parameters)

    我们知道JS函数内部有个arguments对象,可以拿到全部实参.现在ES6给我们带来了一个新的对象,可以拿到除开始参数外的参数,即剩余参数(废话好多 O(∩_∩)O~). 这个新的对象和arguments不一样,它是程序员自定义的一个普通标识符,只是需要在前面加上三个点:... function func(a, ...rest) { console.log(a) console.log(rest) } func(1) func(1, 2, 3, 4) 注意func的第二个参数rest,前面有三

  • ECMAScript6函数默认参数

    语言更新时每一个新增的特性都是从千百万开发者需求里提取过来的,规范采用后能减少程序员的痛苦,带来便捷. 我们经常会这么写 function calc(x, y) { x = x || 0; y = y || 0; // to do with x, y // return x/y } 简单说就是x,y提供了一个默认值为0,不传时x, y以值0来运算.传了就以实际值计算. 又如定义一个ajax function ajax(url, async, dataType) { async = async !

  • ECMAScript中函数function类型

    说起来ECMAScript中上面最有意思,我想那莫过于函数了,有意思的根源,则在于函数实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定.函数通常是使用函数声明语法定义的,如下例子: 复制代码 代码如下: function sum(num1,num2)  {     return num1+num2;  } 这与下面使用函数表达式定义函数的方式几乎相差无几. 复制代码 代码如

  • ECMAScript6的新特性箭头函数(Arrow Function)详细介绍

    箭头函数是ECMAScript 6最受关注的更新内容之一.它引入了一种用「箭头」(=>)来定义函数的新语法,它-它碉堡了~.箭头函数与传统的JavaScript函数主要区别在于以下几点:1.对 this 的关联.函数内置 this 的值,取决于箭头函数在哪儿定义,而非箭头函数执行的上下文环境.2.new 不可用.箭头函数不能使用 new 关键字来实例化对象,不然会报错.3.this 不可变.函数内置 this 不可变,在函数体内整个执行环境中为常量.4.没有arguments对象.更不能通过ar

  • ECMAscrip新特性函数介绍

    目录 1.函数参数的默认值 1.1函数参数指定默认值 1.2与解耦赋值配合使用 1.3函数参数的作用域 2.rest参数 3.箭头函数 3.1什么是箭头函数 3.2箭头函数的注意事项 4.函数的尾调用 1.函数参数的默认值 1.1函数参数指定默认值 在ECMAScript 2015中,允许为函数的参数添加默认值,将默认值直接写在参数的后面即可. 示例代码如下所示: // 函数参数指定默认值 function fun(a = 1, b = 2) { console.log(a + b); } fu

  • ECMAscrip新特性之函数的扩展

    目录 1.函数参数的默认值 1.1函数参数指定默认值 1.2与解耦赋值配合使用 1.3函数参数的作用域 2.rest参数 3.箭头函数 3.1什么是箭头函数 3.2箭头函数的注意事项 4.函数的尾调用 1.函数参数的默认值 1.1函数参数指定默认值 在ECMAScript 2015中,允许为函数的参数添加默认值,将默认值直接写在参数的后面即可. 示例代码如下所示: // 函数参数指定默认值 function fun(a = 1, b = 2) { console.log(a + b); } fu

  • Vue.js 2.5新特性介绍(推荐)

    TypeScript TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.2012年十月份,微软发布了首个公开版本的TypeScript,在2013年6月19日,微软发布了TypeScript 0.9的正式版本,到目前为止,TypeScript已发展到2.x版本 安装TypeScript 安装TypeScript主要有两种方式: 通过npm方式安装(Node.js包管理器) 安装TypeS

  • Hibernate5新特性介绍

    在hibernate5中,有了一些新的变动: 新引导 API Spatial/GIS 支持 Java 8 支持 扩展 AUTO id 生成支持 命名策略分离 属性转换器支持 更好的 "bulk id table" 支持 事务管理 模式工具链 Session API类化 改进 OSGi 支持 改进 bytecode 增强功能 新的引导API 用来引导Hibernate(建立一个SessionFactory)的经典方式一直都是利用Configuration配置类.从

  • ES6中非常实用的新特性介绍

    ECMAScript 6离我们越来越近了,作为它最重要的方言,Javascript也即将迎来语法上的重大变革,InfoQ特开设"深入浅出ES6"专栏,来看一下ES6将给我们带来哪些新内容. 写在前面 ES6 已经提交给 Ecma 大会审查了,也就是说,我们将迎来一大波 javascript 的最新标准,还有一些语法糖.ES6 中有很多值得我们关注的东西,下面是我发现的一些我们最常用的一些新特性,进行记录一下. 1. for-of循环 这个东西用来循环数组很爽,原因呢,是因为它弥补了目前

  • Netbeans 8.2与PHP相关的新特性介绍

    Netbeans 8.2在这个国庆期间终于发布了,其与PHP相关的新特性主要有: 支持PHP 7 详见前面翻译的一篇文章:Netbeans 8.2将支持PHP 7 编辑器功能增强 文档好像没有明确说明,我也还没有发现. PHP项目支持自定义注解 操作如下图: 然后,当你在编写代码注解时,就可以得到刚才自定义的注解提示支持. 支持Symfony 3 没什么人Care吧. 支持PHPUnit 5 PHPUnit 5系列版本已经是基于PHP命名空间化重构的版本了. 支持 phpcs.xml 配置文件

  • python3新特性函数注释Function Annotations用法分析

    本文分析了python3新特性函数注释Function Annotations用法.分享给大家供大家参考,具体如下: Python 3.X新增加了一个特性(Feature),叫作函数注释 Function Annotations 它的用途虽然不是语法级别的硬性要求,但是顾名思义,它可做为函数额外的注释来用. Python中普通的函数定义如下: def func(a, b, c): return a + b + c >>> func(1, 2, 3) 6 添加了函数注释的函数会变成如下形式

  • SharePoint Server 2019新特性介绍

    .基于.NET4.7框架 功能基本是把office365的SPO功能搬家过来.如下: Sharepoint server 2019将在2018年发布 总结 以上所述是小编给大家介绍的SharePoint Server 2019新特性介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • webpack 4.0.0-beta.0版本新特性介绍

    近年来前端技术如雨后春笋般蓬勃发展,我们也在这个潮流下不断地学习.成长.前端技术的不断发展,给我们提供了许多的便利.例如:JSX的出现为我们提供了一个清晰.直观的方式来描述组件树,LESS/SASS的出现提高了我们书写css的能力,AMD/CommonJS/ES6 的出现为我们模块化开发提供了便利.然而,我们需要使用其它工具将这些工具转化成原生语言以运行在浏览器上.为了能够更好的将这些不同的资源整合到一起,我们就需要一个打包工具,webpack就是这个需求下的产物. webpack 可以看做是模

  • Java 17的一些新特性介绍

    目录 前言 Java 17中的Sealed 密封类 Java 17提供了更好的随机生成器 Java对增强安全性的关注 Pattern Matching For Switch预览 前言 Java17将是一个长期支持的LTS版本. Java采用了6个月的发布周期.也就是说,它将每6个月发布一个新版本的Java.每隔3年,LTS版本就会发布一次.目前,Java 11是LTS版本,于2018年9月发布.但在Java17发布后,它将是最新的LTS支持. 许多组织依赖LTS版本,所以他们使用的是Java11

随机推荐