javascript中局部变量的问题。

qq_33121755 2018-09-01 12:13:13
function Person(){}

var person = new Person();//创建一个Person对象
function fun(){
var index = 0;
//给person新建一个方法say
person.run = function(){
console.log(++index);//执行对局部变量index的操作
}
}

fun();//运行fun函数
//循环执行5次person的run方法
for (var i = 0;i < 5;i++) {
person.run();//结果输出1,2,3,4,5
}
疑问:执行完fun函数后,index局部变量不是销毁了吗?为什么person对象的run方法还可以操作index变量呢?
...全文
138 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
風灬雲 2018-09-03
  • 打赏
  • 举报
回复
person是一个全局变量,这个全局变量里面引用了index局部变量,就会形成闭包,就是利用内存的垃圾回收机制漏洞,使得局部变量在函数执行完之后一直驻扎在内存中不被销毁,内存在回收垃圾的时候会看每一个变量的引用关系,如果这个变量已经没有引用关系存在就会回收掉;
天际的海浪 2018-09-01
  • 打赏
  • 举报
回复
js中有一个“闭包”的特性。
简单的说:
当一个函数在另一个函数内创建,这个函数处于局部作用域中,这就形成了“闭包”。
闭包是指创建的函数会与创建函数所在的作用域绑定在一起。只要这个函数存在,创建函数所在的作用域和作用域中的变量就一直存在,不会被系统回收。可以让函数内始终能访问作用域中的变量。
详细说明
https://www.cnblogs.com/q460021417/p/4154340.html
Hello World, 2018-09-01
  • 打赏
  • 举报
回复
person.run等于fun里的一个匿名函数,这个函数的作用域和fun里面的index是相同的

87,993

社区成员

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

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