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 之 private、protected、public和default的作用域

    前言:如果提到protected的访问控制级别,您的第一反应是”只能是子类才可以访问“,那么您很可能需要往下看. 首先,大致介绍一下各个访问控制符的访问控制级别(具体的介绍很多大牛的博文都有介绍,我就 ...

  2. dos命令行运行.class源文件错误解决办法

    dos命令行运行java源文件 public static void main(String[] args) throws IOException { // TODO Auto-generated m ...

  3. OpenDaylight虚拟租户网络(VTN)详解及开发环境搭建

    一.VTN简介及架构分析:   具体详见开发人员指南wiki:https://wiki.opendaylight.org/view/Release/Lithium/VTN/developer_Guid ...

  4. mysql2

    第三章   保证数据完整性 3.1 数据完整性的概述:实体完整性  域完整性  引用完整性  用户自定义完整性 3.2 数据完整性的实现   3.2.1 创建非空约束  (在定义列后加上  not n ...

  5. gitlab+jenkins+hook代码自动构建发布上线

    Gitlab+Jenkins+Hook 1.gitlab和jenkins的安装见: http://www.cnblogs.com/cuishuai/p/7544663.html http://www. ...

  6. Object-C语言Block的实现方式

    开场白 Block基本概念 中间态转换方法 Block编译后结果分析 Block运行时状态与编译状态对比   开场白   Object-C语言是对C语言的扩展,所以将OC源码进行编译的时候,会将OC源 ...

  7. angular 下载文件

    后台直接返回文件即可,以wcf为例:读取目录文件返回,或直接生成文件并返回. public Stream GetCodeSn() { return File.OpenRead("e:\\工作 ...

  8. ORDER BY 高级用法之CASE WHEN

    今天在公司查看一段sql SP代码,发现了一段比较奇怪的代码. 大概长这样子: Select * from tableA ORDER BY ColA , CASE END 小弟才疏学浅,咋一看到代码以 ...

  9. [日常] GO语言圣经-并发获取多个URL

    go语言圣经-并发获取多个URL 1.GO最新奇的特性就是对并发编程的支持,goroutine和channel 2.goroutine是一种函数的并发执行方式,而channel是用来在goroutin ...

  10. Java基础教程(9)--流程控制

    一.分支结构 1.if语句   if语句会与其后的第一条语句或代码块结合,且只有当判断条件为true时才执行语句或代码块.例如,自行车只有在运动的时候才可以减速,就像下面这样: void applyB ...