详解es6中箭头函数
来源:互联网 发布:知父莫若子by谦心诀 编辑:程序博客网 时间:2024/05/01 11:43
基本用法
es6中用箭头定义匿名函数
var f = v => v
相当于es5
var f = function(v){ return v; }
注意,如果箭头函数的代码块多于一句,箭头后面的返回值就要用大括号包起来,并显式写上return
var f = (num1, num2) => { return num1 + num2 }
相当于es5
var f = function(num1, num2){ return num1 + num2; }
如果不需要带参数,用一个括号代表参数部分
var f = () => v
注意,由于箭头后的第一个大括号被解析成代码块,所以如果匿名函数返回一个对象,应该用括号括起来
var f = () => ({ name: 'sysuzhyupeng', age: 24 })
箭头函数可以与解构一起使用
const full = ({ first, last }) => first + ' ' + last; //equals const full = function(person) { return person.first + ' ' + person.last; } full({first: 1, last: 5}) // '1 5'
箭头函数让函数表达更简洁
const isEven = n => n % 2 == 0; const square = n => n * n;
箭头函数另一个用处是简化回调函数
var newArr = arr.sort(function(a, b){ return a - b; }) //es6 var newArr = arr.sort((a, b) => a - b);
另一个例子
[1, 2, 3].map(function(x){ return x * x; }) //es6 [1, 2, 3].map( x => x * x);
使用注意点
- 函数体内的this对象,就是定义时的this对象,而不是运行时的调用对象。所以箭头函数自带绑定this,在很多地方可以用到。
- 不可以使用arguments对象,该对象在函数体内不存在
function foo(){ setTimeout(() => { //return不妨碍尾调用 console.log(this.id) }, 100); } var id = 1; //setTimeout回调中定义的上下文是foo函数,而在事件队列中运行时的上下文是window,所以这里foo的上下文被改变之后,箭头函数定义的回调也同时被改变 foo.call({ id: 2 }) // 2
如果是正常的运行时绑定,现在调用的对象是{ id: 2},应该输出2。然而箭头函数绑定了定义时的对象,也就是window,所以输出1,当然严格模式下会输出undefined。
this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。
//实际上是这样的 function foo() { var _this = this; setTimeout(function () { console.log('id:', _this.id); }, 100); }
嵌套的箭头函数
箭头函数内部,还可以再嵌套箭头函数,下面是一个es5的多重嵌套函数
function insert(){ return {info: function(array){ return {after: function(afterValue){ array.splice(array.indexOf(afterValue) + 1, 0, value); return array; }} }} } insert(2).into([1, 3]).after(1); //[1, 2, 3]
这个函数可以由箭头函数改写
function insert(() => ({ info: (value) => ({ after: (afterValue)=>{ array.splice(array.indexOf(afterValue) + 1, 0, value); return array; }})})
es7的绑定符
ES7提出了“函数绑定”(function bind)运算符,用来取代call、apply、bind调用。虽然该语法还是ES7的一个提案,但是Babel转码器已经支持。
函数绑定运算符是并排的两个双冒号(::),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。
foo::bar; // 等同于 bar.bind(foo); foo::bar(...arguments); // 等同于 bar.apply(foo, arguments);
0 0
- 详解es6中箭头函数
- es6-箭头函数详解
- 关于ES6的箭头函数的详解
- es6的箭头函数,function* , yeild详解
- ES6中箭头函数的使用
- es6箭头函数中this的问题
- ES6中箭头函数的使用
- ES6中箭头函数的使用
- ES6中箭头函数的知识点
- ES6中箭头函数的使用
- ES6中箭头函数的作用
- ES6 中的箭头函数
- ES6 箭头函数 柯里化
- ES6箭头函数=>
- es6箭头函数
- ES6箭头函数
- ES6箭头函数小结
- es6箭头函数
- Java中equals和==的区别
- 如何快速转载CSDN中的博客
- android自定义SearchView
- c/c++常量总结
- 面试题41-题目2:和为S的连续正数序列
- 详解es6中箭头函数
- Mac OS X 删除 MySQL
- 麻烦别人 也不要麻烦自己
- Javascript算法论道: 二分搜索(折半查找)
- 贝塞尔曲线
- 求值器和NURBS
- 谨慎能捕千秋蝉(二)——CSRF
- 携程ELK日志分析平台深耕之路
- SourceTree 免登录跳过初始设置