箭头函式(Arrow Functions)是ES6标准中,最受欢迎的一种新语法。它会受欢迎的原因是好处多多,而且没有什么副作用或坏处,只要注意在某些情况下不要使用过头就行了。有什么好处呢?大致上有以下几点:
箭头函式的语法如下,出自箭头函数(MDN):
([param] [, param]) => {
statements
}
param => expression
简单的说明如下:
一个简单的范例是:
const func = (x) => x + 1
相当于
const func = function (x) { return x + 1 }
所以你可以少打很多英文字元与一些标点符号之类的,所有的函式会变成匿名的函式。基本上的符号使用如下说明:
最容易搞混的是下面这个例子,有花括号({})与没有是两码子事:
const funcA = x => x + 1
const funcB = x => { x + 1 }
funcA(1) //2
funcB(1) //undefined
当没用花括号({})时,代表会自动加return,也只能在一行的语句的时候使用。使用花括号({})则是可以加入多行的语句,不过return不会自动加,有需要你要自己加上,没加这个函式最后等于return undefined(注: 这是JavaScript语言中函式的设计)。
箭头函式可以取代原有使用var self = this或.bind(this)的情况,它可以在词汇上绑定this变数。这在特性篇"this"章的内容中有提到。但有时候情况会比较特殊,要视情况而定,而不是每种情况都一定可以用箭头函式来取代。
原本的范例:
const obj = {a:1}
function func(){
const that = this
setTimeout(
function(){
console.log(that)
}, 2000)
}
func.call(obj) //Object {a: 1}
可以改用箭头函式:
const obj = {a:1}
function func(){
setTimeout( () => { console.log(this) }, 2000)
}
func.call(obj)
用bind方法的来回传一个部份函式的语法,也可以用箭头函式来取代,范例出自Arrow functions vs. bind() :
function add(x, y) {
return x + y
}
const plus1 = add.bind(undefined, 1)
箭头函式的写法如下:
const plus1 = y => add(1, y)
以下这几个范例都是与this值有关,所以如果你的箭头函式里有用到this值要特别小心。以下的范例都只能用一般的函式定义方式,"不可"使用箭头函式。
箭头函式会以定义当下的this值为this值,也就是window物件(或是在严格模式的undefined),所以是存取不到物件中的this.array值的。
const calculate = {
array: [1, 2, 3],
sum: () => {
return this.array.reduce((result, item) => result + item)
}
}
//TypeError: Cannot read property 'array' of undefined
calculate.sum()
这种情况也是像上面的类似,箭头函式的this值,也就是window物件(或是在严格模式的undefined)。
function MyCat(name) {
this.catName = name
}
MyCat.prototype.sayCatName = () => {
return this.catName
}
cat = new MyCat('Mew')
// ReferenceError: cat is not defined
cat.sayCatName()
箭头函式的this值,也就是window物件(或是在严格模式的undefined)。这里的this值如果用一般函式定义的写法,应该就是DOM元素本身,才是正确的值。
const button = document.getElementById('myButton')
button.addEventListener('click', () => {
this.innerhtml = 'Clicked button'
})
//TypeError: Cannot set property 'innerHTML' of undefined
这会直接在用new运算符时抛出例外,根本不能用。
const Message = (text) => {
this.text = text;
}
// Throws "TypeError: Message is not a constructor"
const helloMessage = new Message('Hello World!');
来自:https://eyesofkids.gitbooks.io/javascript-start-from-es6/content/part4/arrow_function.html
箭头函数是ES6中非常重要的性特性。它最显著的作用就是:更简短的函数,并且不绑定this,arguments等属性,它的this永远指向其上下文的 this。它最适合用于非方法函数,并且它们不能用作构造函数。
js模块化的开发并不是随心所欲的,为了便于他人的使用和交流,需要遵循一定的规范。目前,通行的js模块规范主要有两种:CommonJS和AMD
ES6中添加了一个新属性解构,允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。用途:交换变量的值、从函数返回多个值、函数参数的定义、提取JSON数据、函数参数的默认值...
ES6中let变量的特点:1.let声明变量存在块级作用域,2.let不能先使用再声明3.暂时性死区,在代码块内使用let命令声明变量之前,该变量都是不可用的,4.不允许重复声明
ES6的7个实用技巧包括:1交换元素,2 调试,3 单条语句,4 数组拼接,5 制作副本,6 命名参数,7 Async/Await结合数组解构
ES6装饰器(Decorator)是一个函数,用来修改类的行为 在设计阶段可以对类和属性进行注释和修改。从本质上上讲,装饰器的最大作用是修改预定义好的逻辑,或者给各种结构添加一些元数据。
Query作为曾经Web前端的必备利器,随着MVVM框架的兴起,如今已稍显没落。用ES6写了一个基于class简化版的jQuery,包含基础DOM操作,支持链式操作...
ES6 中的一些技巧:模版字符串、块级作用域、Let、Const、块级作用域函数问题、扩展运算符、函数默认参数、解构、对象字面量和简明参数、动态属性名称、箭头函数、for … of 循环、数字字面量。
Rest/Spread 属性:rest操作符在对象解构中的使用。目前,该操作符仅适用于数组解构和参数定义。spread操作符在对象字面量中的使用。目前,这个操作符只能在数组字面量和函数以及方法调用中使用。
ES6使您的代码更具表现力和可读性。而且它与React完美配合!现在您已了解更多基础知识:现在是时候将你的ES6技能提升到一个新的水平!嵌套props解构、 传下所有props、props解构、作为参数的函数、列表解构
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!