闭包写法

//后台每个执行环境都有一个表示变量的对象---变量对象

//例如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, 闭包,箭头函数的更多相关文章

  1. js 从两道面试题加深理解闭包与箭头函数中的this

     壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与t ...

  2. 箭头函数,闭包函数中的this指向

    在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. ...

  3. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  4. 深入理解this机制系列第三篇——箭头函数

    × 目录 [1]痛点 [2]解决 [3]基本用法[4]回调函数[5]注意事项 前面的话 this机制与函数调用有关,而作用域则与函数定义有关.有没有什么是可以将this机制和作用域联系起来的呢?本文将 ...

  5. JS中generater和箭头函数

    generater跟函数很像: function* fn(x){ yield x; yield x++; return x;} 如上所示,generater用function*定义,可以用yield返 ...

  6. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  7. 关于 ES6箭头函数

    转自  http://simplyy.space/article/577c5b0dcbe0a3e656c87c24 多个连续的箭头函数与柯里化 高阶函数 高阶函数定义:将函数作为参数或者返回值是函 ...

  8. ES6学习总结一(变量;箭头函数;解构赋值)

    一.变量 var  1 可以重复声明(var a=1;var a=7;)(一开始用着会觉得限制很少,但是在大型项目会麻烦,人多嘴杂的时候定义重复了就容易出问题还不好找) 2 无法限制修改 3 没有块级 ...

  9. es6(三):es6中函数的扩展(参数默认值、rest参数、箭头函数)

    1.函数可以设置参数默认值 function test1(x,y=1){ console.log(x,y) } test1(10)//10 1 2.rest参数:形式为...变量名 function ...

随机推荐

  1. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring事务管理接口PlatformTransactionManager、TransactionDefinition和TransactionStatus

    Spring 的事务管理是基于 AOP 实现的,而 AOP 是以方法为单位的.Spring 的事务属性分别为传播行为.隔离级别.只读和超时属性,这些属性提供了事务应用的方法和描述策略. 在 Java ...

  2. P 1029 旧键盘

    转跳点:

  3. HDU - 3068 最长回文(manacher算法)

    题意:给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 分析: manacher算法: 1.将字符串中每个字符的两边都插入一个特殊字符.(此操作的目的是,将字符串 ...

  4. windows driver 获取文件属性

    OBJECT_ATTRIBUTES oa; FILE_NETWORK_OPEN_INFORMATION fnoi; UNICODE_STRING strPath = RTL_CONSTANT_STRI ...

  5. 【LeetCode】N皇后I

    [问题]n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案.每一种解法包含一个明确的 n 皇后问 ...

  6. HTTP协议、时间戳

    1.什么是HTTP协议 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的 ...

  7. UVA 11624 UVA 10047 两道用 BFS进行最短路搜索的题

    很少用bfs进行最短路搜索,实际BFS有时候挺方便得,省去了建图以及复杂度也降低了O(N*M): UVA 11624 写的比较挫 #include <iostream> #include ...

  8. stm32h7 hal 库的学习

    stm32h7xx_hal_conf.h 中需要注意的几个地方: HSE_VALUE 这个外接晶振的频率 TICK_INT_PRIORITY 这个 tick 的中断优先级,因为 HAL_DELAY 这 ...

  9. CSS属性之float浮动属性

    float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素. float有四个属性 ...

  10. python print %s 号格式化输出

    python %号格式化输出: 一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中. %s,表示格式化一个对象为字符 "%±(正负号表示)3(数字表示字符串的长度)s&quo ...