JavaScript-闭包函数(理解)
JavaScript-闭包函数(理解)
var foo = function (a) {
return function inner () {
console.log(a)
}
}
var faa = foo(1)
/*
fooContext = {
variableObejct:{
inner:[对函数声明inner的引用]
arg:1
}
this: thisValue,
Scope:[
globalContext.variableObject // 就是全局变量
]
}
innerContext = {
variableObejct:{
}
this: thisValue,
Scope:[
fooContext.variableObject // foo的变量
globalContext.variableObject // 就是全局变量
]
}
这是你原文的一段话:
实际上,foo函数调用结束后, foo函数的变量对象并不会被立即销毁,而是只有当取得foo函数闭包的值的foo1, foo2, foo3调用结束, 这三个函数的变量对象和作用域链被销毁后, foo函数才算“完成任务”,这时,它才能被销毁。
我是不是可以这样理解:
innerContext中的Scope里还有对 fooContext.variableObject 的引用吧,所以此时foo是不会删除的,只有当inner这个闭包函数被调用完之后,inner这个作用域被删除之后,fooContext.variableObject没有其他被引用了,这时也就会删除掉foo的作用域
*/
关于闭包先了解函数执行环境,作用域链以及变量对象
在函数调用的时候,会创建一个函数的执行环境,这个执行环境有一个与之对象的变量对象和作用域链
ExecutionContext = {
variableObject: { .... },
this: thisValue,
Scope: [ // Scope chain
// 所有变量对象的列表 ]
};
变量对象和作用域链
var foo = function (a) {
var name = "zhuyu"
var inner = function () {
console.log(a)
}
return inner
}
foo(222)
// 上面这个函数调用的时候,它的执行环境的变量对象就是variableObject里的数据
// 它的作用域链就是Scope里的数据
fooexectionContext = {
variableObject:{
name:"zhuyu",
inner:[函数inner的引用],
arg:222
}
Scope:[
fooexectionContext.variableObject,
gobleExectionContext.variableObjet,
]
}
上面这个例子只是返回了一个闭包函数,就调用了一次函数
JavaScript-闭包函数(理解)的更多相关文章
- javascript闭包的理解
闭包是Javascript的一个难点,但也是一个很重要的知识点. 1.首先我们要知道变量作用域链 变量的作用域分两种:全局变量和局部变量.没有定义到任何函数中的变量为全局变量,在函数中定义的变量为局部 ...
- Javascript闭包函数快速上手
闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的. 不过我们也还是从闭包的含义出发. 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以 ...
- 我对 javascript 闭包的理解
学js的学到闭包,但是理解不深. 后来看了一下这篇文章: 地址:http://leepiao.blog.163.com/blog/static/4850313020112835355917/ 内容如下 ...
- 对JavaScript闭包的理解
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 在开始了解闭包前我们必须要先理解JavaScript的变量作用域. 一.变量的作用域无非就是两 ...
- 不可不知的JavaScript - 闭包函数
闭包函数 什么是闭包函数? 闭包函数是一种函数的使用方式,最常见的如下: function fn1(){ function fn(){ } return fn; } 这种函数的嵌套方式就是闭包函数,这 ...
- javascript 闭包的理解(一)
过很多谈如何理解闭包的方法,但大多数文章,都是照抄或者解释<Javascript高级程序设计(第三版)>对于闭包的讲解,甚至例程都不约而同的引用高程三181页‘闭包与变量’一节的那个“返回 ...
- JavaScript闭包函数&箭头函数调用与执行
一.标准的闭包函数 //一.标准的闭包函数 function A() { var i=0; ++i; console.log('i : ' + i); return function b() { re ...
- JavaScript闭包函数的理解
闭包就是一个函数能够访问其函数外部作用域中的变量,即在外面可以调用函数中的函数的变量,其实他就是将函数内外部连接起来的桥梁 闭包三大特点: 1. 函数嵌套函数 2. 内部函数可以访问外部函数的变量 3 ...
- 关于Javascript 闭包的理解
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...
- 关于Javascript闭包的理解
以下内容属个人理解,如有看不明白或漏洞之处,纯属水平不佳,还望见谅. 关于闭包,高程里的定义是:指有权访问另一个函数作用域中的变量的函数.创建闭包最常见的方法就是在一个函数的内部再创建一个函数. 这里 ...
随机推荐
- redis window 安装测试--记录
1.下载地址https://github.com/dmajkic/redis/downloads 2.打开一个cmd窗口,使用cd命令切换到指定目录(D:\redis\64bit)运行 redis-s ...
- redis 持久化策略、aof配置、测试、手动持久化、aof文件体积优化
redis持久化策略 1.数据文件.rdb 2.更新日志.aof 设置aof 1.命令方式config set appendonly noconfig rewrite2.配置文件方式 redis持久化 ...
- CCSUOJ评测系统——第四次scrum冲刺
1.小组成员 舒 溢 许嘉荣 唐 浩 黄欣欣 廖帅元 刘洋江 薛思汝 2.最终成果及其代码仓库链接 CCSU评测系统 代码仓库 3.评测系统功能 用户注册 用户可选题目进行提交 用户做题结果 排名功能 ...
- eclipse安装lua
单击Eclipse->Help->Install New Software… 在Work with中输入网址 Kepler - http://download.eclipse.org/re ...
- [OPENSSL下载][证书] OPENSSL将PFX证书转换为PEM格式
OpenSSL Convert PFX Convert PFX to PEM openssl pkcs12 -in certificate.pfx -out certificate.cer -node ...
- mysql优化——explain详解
MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...
- mvc 下json超过限制,上传excel大小限制
json超过限制 解决方案1:config中添加节点 控制序列化长度 <webServices> <jsonSerialization maxJsonLength="10 ...
- 连接Mysql错误 error 1042 can't get hostname for your address
背景: 1.etc下的hosts文件有: 127.0.0.1 localhost 2.MySQL的my.ini配置文件: [mysqld] 节点下已经加入以下两行代码 skip-n ...
- Zabbix日常监控之lvs监控
参考博文:http://blog.51cto.com/kaibinyuan/1711863 监控环境的搭建请参考:https://www.cnblogs.com/huangyanqi/p/918780 ...
- [EffectiveC++]item32:确定你的public继承模塑出is-a关系