JavaScript闭包是如何把变量保存在内存中的?

dongjunhui2010 2015-06-27 03:51:02
如题?只要简要说说就行了
...全文
531 3 打赏 收藏 转发到动态 举报
写回复
用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环境 存放当前的数据

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧