闭包写法

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

//例如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

最新文章

  1. linux下更新python
  2. 基于jstree的 对混乱的 命名系统进行归类的 计算机软件
  3. POJ 1321
  4. two sum - leetcode
  5. [poj3274]排排站(Hash)
  6. hdu5255 魔法因子
  7. 外部表查询时出现ORA-29913和ORA-29400错误
  8. jquery动态插入行
  9. archlinux相关资料整理
  10. 利用BP神经网络预测水道浅滩演变
  11. UVA 10494-If We Were a Child Again(一流的塔尔苏斯)
  12. Pascal's Triangle II leetcode
  13. 浅析Java的Object类
  14. Mac OSX 系统搭建 Java 开发环境
  15. VBA二次学习笔记(3)——批量合并单元格
  16. leetcode python 009
  17. Hadoop 综合揭秘——MapReduce 基础编程(介绍 Combine、Partitioner、WritableComparable、WritableComparator 使用方式)
  18. (转)java 层调用Jni(Ndk) 持久化c c++ 对象
  19. SQL注入之Sqli-labs系列第二十一关(基于复杂性的cookie POST报错注入)和二十二关(基于双引号的cookie POST报错注入)
  20. spring-data-redis配制

热门文章

  1. 吴裕雄--天生自然C++语言学习笔记:C++ 数字
  2. Python MySQL 创建数据库
  3. check Linux文件夹个数
  4. python---函数作用域
  5. DataStructuresAndAlogorithm--红黑树
  6. Distributed--2PC和3PC
  7. 深入X64架构(翻译)
  8. POJ 1149 网络流 合并建图
  9. sql server ------创建本地数据库 SQL Server 排序规则
  10. Python __name__="__main__"的作用