ES6箭头函数-2
以下来文字来自阮大神所著书籍摘记。为了加深记忆。本人就手动敲了一遍(相关代码本人也执行过,可保证运行通过.)
箭头函数注意事项:
1) 函数体内的this对象就是定义时所在的对象,而不是使用时所在的对象。
2) 不可以当做构造函数。也就是说,不可以使用new命令,否则会抛出错误。
3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用rest参数代替。
关于什么是arguments对象。可以参考MDN链接https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments
4) 不可以使用yield命令,因此箭头函数不能用作Generator函数。
其中,第一点尤其值得注意,this对象的指向是可变的,但在箭头函数中它是固定的。
下面有几个例子体会一下箭头函数的使用:
function foo(){
setTimeout(()=>
{
console.log('id:',this.id);
},100);
} var id=21;
foo.call({id:42}) //输出42setTimeout的参数是一个箭头函数,这个箭头函数的定义是在foo函数生成时生效的,真正执行要到100ms秒以后。如果是普通函数,执行时this应该指向全局对象window,这时应该输出21.但是箭头函数导致this总是指向函数定义生效时所在的对象(本例是{id:42}),所以输出的是42.
- 箭头函数可以让this指向固定化,这种特性非常有利于封装回调函数。例如以下的例子。DOM事件的回调函数封装在一个对象里面。
var handler={
id:'123456',
init:function()
{
document.addEventListener('click',
event=>this.doSomething(event.type,false);
},
doSomething:function(type)
{
console.log('Handling '+type+' for'+this.id);
}
}以上代码的init方法中使用了箭头函数,这导致箭头函数里边的this总是指向handler对象。
function foo()
{
return ()=>
{
return ()=>
{
return ()=>
{
console.log('id:',this.id);
}
}
}
}
var f=foo.call({id:1});
var t1=f.call({id:2})()();
var t2=f().call({id:3})();
var t3=f()().call({id:4})上面的代码只有一个this,就是函数foo的this,所以t1,t2,t3都输出同样的结果。因为所有的内层函数都是箭头函数。都没有自己的this,它们的this其实都是最外层foo函数的this.
- 除了this,以下3个变量在箭头函数中也是不存在的,分别指向外城函数对应的变量:arguments、super和new.target.
function foo()
{
setTimeout(()=>
{
console.log('args:',arguments)
},100)
}
foo(2,4,6,8)上面的代码中,箭头函数内部的变量arguments其实是函数foo的arguments变量。
- 另外由于箭头函数没有自己的this,当然也就不能用call()、apply()、bind()这些方法去改变this的指向。
(function()
{
return [
console.log((()=>this.x).bind({x:'inner'})())
]
}).call({x:'outer'});
//输出['outer']上面的代码中,箭头函数没有自己的this,所以bind方法无效,内部的this指向外部的this.
ES6箭头函数-2的更多相关文章
- es6箭头函数讲解
es6箭头函数的用法 箭头函数是es6的一种函数的简写方法. 如下: var f = v = > v; //等同于 var f = function(v){ return v; } var su ...
- es6箭头函数 this 指向问题
es5中 this 的指向 var factory = function(){ this.a = 'a'; this.b = 'b'; this.c = { a:'a+', b:function(){ ...
- ES6 — 箭头函数
一 为什么要有箭头函数 我们在日常开发中,可能会需要写类似下面的代码 const Person = { 'name': 'little bear', 'age': 18, 'sayHello': fu ...
- 前端分享----JS异步编程+ES6箭头函数
前端分享----JS异步编程+ES6箭头函数 ##概述Javascript语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只 ...
- ES6 箭头函数 this 指向
ES6 箭头函数 this 指向 箭头函数有几个使用注意点: 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个 ...
- ES6 箭头函数(Arrow Functions)
ES6 箭头函数(Arrow Functions) ES6 可以使用 "箭头"(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 具有一个参数的简单函 ...
- ES6箭头函数基本用法
ES6箭头函数基本用法 ``` window.onload = function(){ alert(abc); } //箭头函数 window.onload = ()=>{ alert(&quo ...
- ES6 箭头函数this指向问题
var name = "window"; var person1 = { name: "person1", show1: function() { consol ...
- Vue ES6箭头函数使用总结
Vue ES6箭头函数使用总结 by:授客 QQ:1033553122 箭头函数 ES6允许使用“箭头”(=>)定义函数: 函数不带参数 定义方法:函数名称 = () => 函数体 ...
- ES6 -箭头函数 ,对象的函数解构
ES6 -箭头函数: //es6 中的箭头函数和扩展 //es5的写法 // function add(a,b){ // return a + b; // } // add(1,2); //3 fun ...
随机推荐
- C#中获取多个对象list中对象共有的属性项
场景 有一组数据list<TestDataList> 每一个TestDataList是一个对象,此对象可能有温度数据,也可能没有温度数据. 有温度数据的情况下,温度数据属性又是一个list ...
- Inherit from the Business Class Library Class 继承自Business类(EF)
In this lesson, you will learn how to implement business classes for your application using the Busi ...
- PHP intdiv 数学函数
定义和用法 intdiv - 对除法结果取整 版本支持 PHP4 PHP5 PHP7 不支持 不支持 支持 语法 intdiv ( int $dividend , int $divisor ) int ...
- Html5 Canvas动画基础碰撞检测的实现
在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS.Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术 ...
- JS基础语法---arguments对象伪数组
引入: //计算两个数字的和 function f1(x, y) { return x + y; } //计算三个数字的和 function f2(x, y, z) { return x + y + ...
- 为什么AlertDialog要使用Builder来构建呢
为什么 AlertDialog 使用Builder 模式呢? 首先说句废话,因为 AlertDialog 太过复杂,内部参数太多,然后不使用构建者模式那么 AlertDialog 的构造方法就可能是: ...
- 【Android】Android多渠道打包--Gradle打包
Android多渠道打包--Gradle打包 前言 由于App一般都会在多个应用市场上架,为了分析App在每个不同渠道的具体的数据,一般都会对不同渠道打包不同的App.多渠道打包有多种方式,这里只介绍 ...
- Spring 事务 属性 详细
学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过几天就会忘记,接下来我们一起实践来学习Spring事务的传播属性. 传播属性 传播属性定义的是当一个事务方法碰到另一个事 ...
- 小程序登录解密用户数据encryptedData -41001: encodingAesKey 非法
问题: 做小程序微信授权登录,先获取code,然后去获取到session_key和open_id,再拿到encryptedData,传到服务器去解密拿到用户信息,但是有时成功,有时返回-41001错误 ...
- Linux系统学习 一、安装,调试
环境 主机: Windows 10 虚拟机: VMware 15 Pro 镜像: 一.安装过程: 然后开启虚拟机 设置主机名 时区 密码 最小安装 等着 重启 登录 二.配置静态IP地址 输入ifco ...