Function

箭头函数

  • ES6中对于函数的扩展最吸引人的莫过于箭头函数啦,不多说,先学会再说。
  • 函数体内的this对象,是定义时所在的对象,而不是使用时所在的对象,这个特性与正常函数不同。
// 箭头定义函数
function foo() {
setTimeout(() => {
console.log('id:', this.id); // this指向{id:42}这个对象
}, 100);
}
var id = 21;
foo.call({ id: 42 }); // 42 // 普通定义函数
function foo() {
setTimeout(function(){
console.log('id:', this.id); // this指向window
}, 100);
}
var id = 21;
foo.call({ id: 42 }); // 21
  • 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。没有内部this。不过都ES6了,想要定义类,直接使用class不就得了
var Demo = (foo) => console.log(foo);
new Demo('foo') // 报错啦 testFunc is not a constructor
  • 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数(...args)代替。
var demo = (foo) => console.log(arguments);
demo() // 报错 arguments is not defined // 可以用Rest写法代替
var demo = (...args) => console.log(args);
demo('a') // ["a"]
  • 不可以使用yield命令,因此箭头函数不能用作Generator函数。待研究^^!!

参数默认值

  • 尾参数设置默认值
let log = (x, y = 'World') => x + ' ' + y;
log('hello', 'xiaoming'); // hello xiaoming
log('hello'); // hello World

参数解构赋值

函数的length属性

  • 返回未设置默认值的参数的个数
((x, y, z = 1) => 1).length // 2
  • 如果设置默认值的参数不是尾参数,设置默认值的参数后面的未设置默认值的参数也不计入length
((x = 1, y, z) => 1).length // 0

作用域

var x = 1;
function foo(x, y = x){
console.log(y);
}
foo(2) // 2
let x = 1;
function foo(y = x){
let x = 2;
console.log(y);
}
foo() // 1

rest参数

  • rest参数后面不能再有参数
(a, ...b) => 1
(a, ...b, c) => 1 // 报错

ES6-Function的更多相关文章

  1. [ES6] Function Params

    1. Default Value of function param: The function displayTopicsPreview() raises an error on the very ...

  2. ES6 new syntax of Default Function Parameters

    Default Function Parameters.md Default Function Parameters function getSum(a,b){ a = (a !== undefine ...

  3. [ES6] 06. Arrow Function =>

    ES6 arrow function is somehow like CoffeeScirpt. CoffeeScript: //function call coffee = -> coffee ...

  4. 关于ES6新增的东西

    查询浏览器对ES6的支持情况https://kangax.github.io/compat-table/es6/ Chrome.MS Edge.Firefox.Safari.Node和其它很多环境都已 ...

  5. [转] 《ES6标准入门》读书笔记

    来源:https://segmentfault.com/a/1190000005863641 let和const命令 ES6新增let命令,用于声明变量,是块级作用域. let声明的变量不会像var声 ...

  6. ES6与ES5差别

    1.ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { var a = 1; let b = 1; } a; b;/ let不像var ...

  7. es6+移动轮播插件

    前言:之前赶项目,都是直接用框架,对于touch事件是模拟两可,趁着有心情,用es6写一个原生移动轮播插件. 用了es6的新特性,确实挺爽的,说到es6,就不得不说到babel,博主已经码好了,直接用 ...

  8. gulp+Babel 搭建ES6环境

    Gulp是什么? Gulp是一个工作流的构建系统,开发者可以使用它在网站开发过程中自动执行常见任务.Gulp是基于Node.js构建的,因此Gulp源文件和你用来定义任务的Gulp文件都被写进了Jav ...

  9. ES6,ES2105核心功能一览,js新特性详解

    ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...

  10. ES6 入门系列 - 函数的扩展

    1函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log( ...

随机推荐

  1. Java之集合(十九)LinkedBlockingDeque

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7494577.html 1.前言 本章介绍LinkedBlockingDeque,这是一个可选容量的有界双向链表队 ...

  2. Linux下安装jdk8步骤详述(转载)

    Linux下安装jdk8步骤详述 原文地址:http://www.cnblogs.com/shihaiming/p/5809553.html 作为Java开发人员,在Linux下安装一些开发工具是必备 ...

  3. oracle_jdbc_Query

    本例子程序是根据马士兵老师所讲+自己的注释.写的比较全面,特别是最后释放资源的代码. package com.ayang.jdbc; import java.sql.*; public class T ...

  4. linux安装扩展总结

    ---恢复内容开始--- 1.安装php 模块安装命令. wget http://pear.php.net/go-pear 执行 php go_pear 如果是php7 wget http://pea ...

  5. MyEclipse *的下载

    找到MyEclipse的各种历史版本下载页面 : MyEclipse官方中文网 欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑       同时,大家可以关注我的个人博客 ...

  6. c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10711810.html 1.类中的函数定义后加了一个const代表什么? 代表它将具备以下三个 ...

  7. Java 生成指定范围的随机数

    /** * 生成[min, max]之间的随机整数 * * @param min 最小整数 * @param max 最大整数 * @return * @author jqlin */ private ...

  8. android学习-Adapter适配器进阶

    参考资源 Android 快速开发系列 打造万能的ListView GridView 适配器 实现代码复用,争取打机**的时间. android4.4源码 target=android-19 一般自定 ...

  9. 在Ubuntu16.04上使用Open Grok

    Open Grok是一个强大的源代码搜索和对照引擎,是Open Solaris的源文件浏览及搜索工具.虽然Open Solaris已经不复存在,但这个工具仍然处于开发与维护之中. 相信我,绝对值得你拥 ...

  10. docker-compose管理daocker

    Docker-compose管理docker服务 1.安装docker-compose @首先确保服务器上已经安装docker环境,如果没有安装使用如下命令进行安装: # yum  -y  insta ...