社区
JavaScript
帖子详情
JavaScript闭包是如何把变量保存在内存中的?
dongjunhui2010
2015-06-27 03:51:02
如题?只要简要说说就行了
...全文
531
3
打赏
收藏
JavaScript闭包是如何把变量保存在内存中的?
如题?只要简要说说就行了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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环境 存放当前的数据
JS
闭包
|谈谈对
闭包
的理解?什么是
闭包
?
闭包
有哪些应用场景?
闭包
有什么缺点?如何避免
闭包
引起的
内存
泄露?
闭包
会使得函数
中
的
变量
都被长久
保存
在
内存
中
,增加
内存
使用量。作用一个是可以直接访问函数内部的私有
变量
,并且形成私有空间,不受外界干扰(保护),另一个就是让这些
变量
的值始终保持在
内存
中
(
保存
)比如使用...
什么是
闭包
?
闭包
的作用?
闭包
会导致
内存
泄漏吗?
闭包
的另一个用途是使已经运行结束的函数上下文
中
的
变量
对象继续留在
内存
中
,因为
闭包
函数保留了这个
变量
对象的引用,所以这个
变量
对象不会被回收。由于
闭包
会携带包含它的函数的作用域,因此会占用更多的
内存
,过度...
闭包
可以使得
变量
值始终保持在
内存
中
闭包
可以使得
变量
值始终保持在
内存
中
代码: var numAdd; function f1(){ var num = 100; //局部
变量
,生存期在f1()调用完以后被删除,但使用
闭包
后就不会被删除了 //匿名函数 numAdd = function(){ num...
JavaScript
中
的
闭包
是什么?
闭包
的作用?
1.什么是
闭包
呢? 能够读取其他函数内部
变量
的函数,在js
中
,只有函数内部的子函数才能...
变量
可以长期驻扎在
内存
之
中
避免全局
变量
的污染,有私有成员 普通函数调用,执行完函数,就会回收
变量
,重新赋值计算 ...
什么是
闭包
,
闭包
造成的
内存
泄露如何解决
由于
变量
的作用域的原因-----(函数内部能读取全局
变量
,函数外部无法读取函数内部的
变量
【局部
变量
】),为了在函数外部读取局部
变量
,所以就有了
闭包
。
闭包
的作用 1.访问其他函数内部
变量
2.保护
变量
不被
内存
回收...
JavaScript
87,904
社区成员
224,614
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章