this, 闭包,箭头函数
闭包写法
//后台每个执行环境都有一个表示变量的对象---变量对象
//例如compare()函数调用
//compare的执行环境而言,其作用域链包含两个变量对象
- 本地活动对象
- 全局活动对象
全局变量对象始终存在,compare()函数只在函数执行过程中存在
作用域链:一个指向变量对象的指针列表,只引用
//
定义:闭包有权访问另一个函数作用域中的变量的函数
//内部定义。然后返回
test = {
a:"test",
set:function () {
var a = "set"
function f() {
var a = "f"
}
return f
}
} 直接返回一个函数
test = {
a:"test",
set:function () {
var a = "set"
return f() {
var a = "f"
}
}
}
此处一般返回匿名函数
闭包有两种写法 没有区别(暂定没有区别)
闭包两个问题
- 内存泄漏:由于作用域链的存在,匿名函数执行完,其包含函数的活动对象不会立即销毁 解决方案:解除引用
- 闭包只能取得函数中任何变量的最后一个值
this对象
this对象是在运行时基于函数的执行环境绑定的
- 全局中,this等于window
- 当被作为某个对象的方法调用时,this等于那个对象
匿名函数的执行环境具有全局性,因此其this对象通常指向window
每个函数在被调用的时候自动取得两个特殊变量,this和arguments(若调用者内部没有this.变量的值,则返回undefined)。内部函数搜索这两个变量时,只会搜索到其活动对象为止。因此永远不会访问外部函数中这两个变量。不过可以把外部的this对象保存在一个闭包能访问的变量中 that = this
特殊1 //函数作为函数调用和函数作为方法调用是有区别的 //匿名函数的执行环境具有全局性
var a = "windows" test = {
a:"test",
set:function () {
var a = "set"
function f() {
var a = "f"
console.log(this,this.a)
}
return f
}
} test.set()() //windows 指向全局
特殊2:箭头函数中的this指向定义函数时候所处的对象
//由于箭头函数没有this指向,所以不能用call apply bind
//箭头函数是继承而来
//所以只会从自己的作用域链一层一层向上找
var a = "windows" test = {
a:"test",
set:() => {
var a = "set"
var f = () => {
var a = "f"
console.log(this,this.a)
}
return f
}
} test.set()() //windows
一层一层往上找
var a = "windows" test = {
a:"test",
set:function () {
var a = "set"
var f = () => {
var a = "f"
console.log(this,this.a)
}
return f
}
} test.set()() //test
this, 闭包,箭头函数的更多相关文章
- js 从两道面试题加深理解闭包与箭头函数中的this
壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与t ...
- 箭头函数,闭包函数中的this指向
在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. ...
- ES6 箭头函数中的 this?你可能想多了(翻译)
箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...
- 深入理解this机制系列第三篇——箭头函数
× 目录 [1]痛点 [2]解决 [3]基本用法[4]回调函数[5]注意事项 前面的话 this机制与函数调用有关,而作用域则与函数定义有关.有没有什么是可以将this机制和作用域联系起来的呢?本文将 ...
- JS中generater和箭头函数
generater跟函数很像: function* fn(x){ yield x; yield x++; return x;} 如上所示,generater用function*定义,可以用yield返 ...
- 简单理解ECMAScript2015中的箭头函数新特性
箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...
- 关于 ES6箭头函数
转自 http://simplyy.space/article/577c5b0dcbe0a3e656c87c24 多个连续的箭头函数与柯里化 高阶函数 高阶函数定义:将函数作为参数或者返回值是函 ...
- ES6学习总结一(变量;箭头函数;解构赋值)
一.变量 var 1 可以重复声明(var a=1;var a=7;)(一开始用着会觉得限制很少,但是在大型项目会麻烦,人多嘴杂的时候定义重复了就容易出问题还不好找) 2 无法限制修改 3 没有块级 ...
- es6(三):es6中函数的扩展(参数默认值、rest参数、箭头函数)
1.函数可以设置参数默认值 function test1(x,y=1){ console.log(x,y) } test1(10)//10 1 2.rest参数:形式为...变量名 function ...
随机推荐
- ajax异步提交 有时会出现无bug的数据处理异常-----debug没有问题,正常运行却数据处理不正确,极少机会会出现正常的处理结果
ajax 被使用时,常默认的就使用了异步处理. 当遇到后面的代码对同样的数据进行处理 或 要依赖前面ajax处理的结果时,就会导致数据处理结果不正确,未达到预期值. 且,debug时却能正常完成功能 ...
- hdu4632 Palindrome subsequence 回文子序列个数 区间dp
Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/ ...
- (二分查找)LowerBound
在包含size个元素的,从小到大顺序的int数组a里查找比给定整数p小的,下标最大的元素,找不到返回-1 题解: int LowerBound(int a[],int size,int p) { in ...
- 为什么ApplePay在中国一直火不起来?
今年7月,易观发布<中国第三方移动支付市场2018年第1季度监测报告>.报告显示,2018年第一季度支付宝以53.76%的市场份额占据移动支付头把交椅,腾讯金融(微信支付)则以38.95% ...
- Springboot前后端分离中,后端拦截器拦截后,前端没有对应的返回码可以判断
项目登录流程如下 用户进入前端登录界面,输入账号密码等,输入完成之后前端发送请求到后端(拦截器不会拦截登录请求),后端验证账号密码等成功之后生成Token并存储到数据库,数据库中包含该Token过期时 ...
- Go语言之冒泡排序
package main //main函数 import "fmt" //相当于#include func main() { ar := [], , , , , , , , , } ...
- BZOJ [Scoi2010]游戏
题解: 解法一:建立图论模型,发现只要联通块中有环则这个联通块中的值都可以被攻击到 如果是树,则只能攻击size-1个 解法二:二分图匹配,二分答案,看看是否能攻击到mid #include<i ...
- Python中的常用内置对象之map对象
如果你了解云计算的最重要的计算框架Mapreduce,你就对Python提供的map和reduce对象有很好的理解,在大数据面前,单机计算愈加力不从心,分布式计算也就是后来的云计算的框架担当大任,它提 ...
- python基础2--进制、字符编码和文件处理
一.进制 1.二进制 定义 二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一" 转换方式 二进制转换为十进制: 把二进制数按权展开.相加即得十进制数. ...
- hook键盘钩子 带dll
library Key; uses SysUtils, Classes, HookKey_Unit in 'HookKey_Unit.pas'; {$R *.res} exports HookOn,H ...