美文网首页前端基础加强Web前端之路让前端飞
ECMAScript6基础学习教程(四)函数

ECMAScript6基础学习教程(四)函数

作者: 娜姐聊前端 | 来源:发表于2017-04-16 23:15 被阅读87次

ES6在函数方面有很多扩展,其中最为大众所知的就是箭头函数。除此之外,还有很多其他新特性,比如,参数默认值,Rest参数和扩展运算符......下面将一一介绍。

1. 箭头函数

ES6运行用=>定义函数,格式如下:

//ES5
var foo = function (x) {
  return x*x;
}
//ES6
var foo = (x) =>{
  return x*x;
}
//可以简写为
var foo = (x)=>x*x;

箭头函数用=>代替关键字function。如果函数代码块只有一条语句,那么,可以省略函数大括号{}和关键字return

箭头函数最大特点,就是函数没有this对象,因此,箭头函数有如下特点:

  1. 箭头函数不能用作构造函数
  2. 箭头函数不能使用call(), apply(), bind()方法
  3. 不可以使用arguments对象
  4. 箭头函数中如果调用this,那么this指向函数定义时所在对象的this变量。
var test = function(){
  setTimeout(()=>{
    console.log(this.id);
  }, 100)
}
// 箭头函数定义在test方法中,而调用test的对象为{id:1},因此test函数的this对象指向{id:1}
// 那么,箭头函数中的this,也同样指向{id:1}
test.call({id: 1}); // 1

2.函数参数默认值

类似解构赋值,函数参数也可以定义默认值,同样,用?===undefined来判断是否参数值为空。

function log(x="hello", y="world") {
  console.log(x+ " " + y);
}
log(); // "hello world"
log("Hi"); // "Hi world"
// null不会被判断为空值
log(null, "javascript"); //"null javascript"

ECMAScript6基础学习教程(三)变量的解构赋值文章中,曾经提到在函数中应用解构赋值,这里再次温习一遍。

function test({a=1, b=2, c=3}) {
  console.log(a+b+c);
}
test({c:4}); // 7
test({a:5, b:5}); //13

3. 函数的rest参数

函数的rest参数格式为function(...args)或,function(x, y, ...args)args为数组,保存的是函数剩余变量(注意:rest参数必须是函数最后一个参数,这点和数组解构赋值里面的...用法类似)。

function add(factor, ...args) {
  let total = 0;
  args.forEach((item)=>{
    total += item;
  });
  return total * factor;
}
add(2, 1, 2, 3, 4, 5); // 30

4. 扩展运算符

扩展运算符,格式也是...,它将一个数组转为用逗号分隔的参数序列。
最常见的使用场景,就是调用函数
比如上面的add函数,我们可以如下调用:

var args = [2, 1, 2, 3, 4, 5];
add(...args); // 30

与rest参数不同,扩展运算符可以不是最后一个参数。比如,还可以如下调用add函数:

var args = [1, 2, 3, 4];
add(1, ...args, 5); // 30

还可以利用扩展运算符合并数组或者对象(是一种复制操作,为浅拷贝)

// 合并数组
var array1= [1,2];
var array2= [3,4];
var array = [...array1, ...array2]; // [1,2,3,4]

// 合并对象
var obj1 ={a: 1, d: 5, f: {g: 6}};
var obj2 ={a:2, b:3, c:4};
// 后面参数对象的属性,可能会覆盖前面对象的属性,如下,属性a被覆盖
var obj = {...obj1, ...obj2}; // obj === { a: 2, d: 5, f: { g: 6 }, b: 3, c: 4 }
// 改变源对象的值
obj1.f.g = 10;
// 查看obj,发现值同步改变
console.log(obj); // { a: 2, d: 5, f: { g: 10 }, b: 3, c: 4 }

小结

最容易混淆的就是函数"rest参数"和"扩展运算符",两者功能正好相反:

  • 前者将参数序列转为数组,后者将数组转为参数序列
function test(...args) {
  return [1, 2, 3, ...args];
}
test(4, 5, 6, 7); // [1, 2, 3, 4, 5, 6, 7]

下一节:ECMAScript6基础学习教程(五)对象

微信公众号:

相关文章

  • ECMAScript6基础学习教程(四)函数

    ES6在函数方面有很多扩展,其中最为大众所知的就是箭头函数。除此之外,还有很多其他新特性,比如,参数默认值,Res...

  • 学习网站

    jsp ECMAScript6 Java 含Java教程 Java学习书单 Ubuntu JDK 安装 HTML ...

  • ES6 入门简介

    本教程我们学习 ES6 的基础知识,ES6 是 ECMAScript6 的简称,是2015年6月正式发布的 Jav...

  • ES6 入门简介

    本教程我们学习 ES6 的基础知识,ES6 是 ECMAScript6 的简称,是2015年6月正式发布的 Jav...

  • Scala笔记

    Scala基础 学习twitter的scala教程的笔记 函数 函数定义,scala语法中可以使用多种方式定义函数...

  • ECMAScript6基础学习教程(六)类

    ES6里引入Class概念,非常类似其他面向对象语言(比如Java)。实际上,Class只是简化了对象原型方法的语...

  • ECMAScript6基础学习教程(七)模块

    ES6支持了模块功能(模块导出和导入),类似node.js的模块功能。但是,两者有着本质区别。 node.js遵循...

  • ECMAScript6基础学习教程(五)对象

    ES6在处理对象上,又添加了新方法。 1. 属性简洁写法 当属性名和属性值变量同名时,ES6允许在对象中只写属性名...

  • ECMAScript6基础学习教程(八)Promise

    JavaScript被设计为单线程(webWoker可以处理多线程),利用事件轮询机制,可以模拟出多线程效果,也就...

  • ES6 Generator函数学习

    学习自阮一峰 ECMAScript6 入门 基本概念 Generator 函数是一个普通函数,但有两个特征 fun...

网友评论

  • 夏目祐太:挺好的文章怎么没啥人看,挺适合入门的,请问可以转载嘛?
    娜姐聊前端:@关于郑州想的全是你 可以的。很高兴你喜欢:smile:

本文标题:ECMAScript6基础学习教程(四)函数

本文链接:https://www.haomeiwen.com/subject/myxzattx.html