社区
JavaScript
帖子详情
JavaScript闭包是如何把变量保存在内存中的?
dongjunhui2010
2015-06-27 03:51:02
如题?只要简要说说就行了
...全文
558
3
打赏
收藏
JavaScript闭包是如何把变量保存在内存中的?
如题?只要简要说说就行了
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
forwardNow
2015-06-27
打赏
举报
回复
如果是C语言, 一个函数的局部变量定义在CUP的栈中, 当函数执行完毕返回后局部变量的确不存在了。 作用域 JavaScript是基于词法作用域的语言: 通过阅读包含变量定义在内的数行源码就能知道变量的作用域。 全局变量在程序中始终是有定义的(有效的), 局部变量在声明它的函数体以及嵌套的函数内始终是有定义的(有效的)。 作用域链 如果将局部变量看做是某个对象的属性, 则可换个角度解读变量作用域. 每一段JavaScript代码(全局代码、函数) 都有一个与之相关联的作用域链, 这个作用域链是一个 对象列表 或 链表, 这组对象(链上的对象)定义了这段代码"作用域中"的变量 变量解析 当JavaScript需要查找变量x的值时, 它会从链中的第一个对象开始查找, 如果这个对象有一个名为x的属性, 则使用这个属性值, 否则, 查找链上的下一个对象, 以此类推。 如果作用域链上没有任何一个对象含有属性x, 则认为这段代码的作用域链上不存在x, 并最终抛出一个引用错误异常(ReferenceError) 说明 在JavaScript的最顶层代码中(不包含在任何函数内的代码), 作用域链由一个全局对象(window对象)组成. 在不包含嵌套的函数体内,作用域链上有两个对象: 1, 定义函数参数和局部变量的对象; 2, 全局对象。 在一个嵌套的函数体内,作用域链上至少有三个对象 当定义一个函数时, 它实际上保存一个作用域链. 当调用这个函数时 它创建一个新的对象来存储它的局部变量, 并将这个对象添加至保存的那个作用域链上 同时创建一个新的更长的表示函数调用域的"链"
KK3K2005
2015-06-27
打赏
举报
回复
每个js函数运行后都有一个context环境 存放当前的数据
精通
JavaScript
(jQuery之父力作)『高清晰』.pdf
jQuery之父John Resig 力作,我看了。很好的东西,对朋友们学习框架Prototype、jQuery等,有启示迪人的作用!【推荐!】
JS
闭包
|谈谈对
闭包
的理解?什么是
闭包
?
闭包
有哪些应用场景?
闭包
有什么缺点?如何避免
闭包
引起的
内存
泄露?
闭包
是指有权访问另一个函数作用域
变量
的函数,比如在函数A
中
声明了另一个函数B且函数B引用了函数A
中
的
变量
并将内部函数B作为外部函数A的返回值,那么这个函数B就是我们所说的
闭包
。
闭包
会使得函数
中
的
变量
都被长久
保存
在
内存
中
,增加
内存
使用量。作用一个是可以直接访问函数内部的私有
变量
,并且形成私有空间,不受外界干扰(保护),另一个就是让这些
变量
的值始终保持在
内存
中
(
保存
)比如使用
闭包
模拟私有
变量
、方法、实现函数柯里化、模块化、setTimeout传参、回调、立即执行函数、函数防抖、节流等。...
什么是
闭包
?
闭包
的作用?
闭包
会导致
内存
泄漏吗?
任何定义在函数或块
中
的
变量
,都可以认为是私有的,因为在这个函数或块的外部无法访问其
中
的
变量
。
闭包
是指有权访问另一个函数作用域
中
变量
的函数,创建
闭包
的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部
变量
。
闭包
的另一个用途是使已经运行结束的函数上下文
中
的
变量
对象继续留在
内存
中
,因为
闭包
函数保留了这个
变量
对象的引用,所以这个
变量
对象不会被回收。由于
闭包
会携带包含它的函数的作用域,因此会占用更多的
内存
,过度的使用
闭包
会导致
内存
占用过多,因此,在绝对必要时,再考虑使用
闭包
。
【js】
闭包
及其
内存
保存
简单易懂的介绍
注意,这里不需要像嵌套函数一样手动删除引用,因为这里的
闭包
函数并没有(通过return)暴露给外界去引用。在这种情况下,outerFunc占用
内存
的时间 = closureExample占用
内存
的时间,而不是在outerFunction();
闭包
通常是在嵌套函数
中
实现的(但并不是只有返回一个小函数的大函数能造成
闭包
!局部活动对象(包含所有挂在这个活动对象下的
变量
,也就是函数内的
变量
)被销毁。
闭包
= 形成
闭包
的函数 + 被引用的(裁剪过的)作用域。
闭包
内的
变量
不会自动销毁,会被“一直”
保存
在
内存
中
。
JavaScript
87,997
社区成员
224,709
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章