扫码关注官方订阅号
这个i是为什么一直在内存中 麻烦各位前辈指导一下
欢迎选择我的课程,让我们一起见证您的进步~~
首先一个变量能够一直停留在内存中的条件是什么?能够被外部引用,而且是一直引用这种引用不限于直接引用,还包括间接引用以及循环引用接下来你需要了解一定的JS内存结构的知识了先分析函数
var a = (function() { var i = 0; function fn() { alert(i++); } return { fa: function() { fn(); } } }()); a.fa();// 0 a.fa();// 1
其实这个闭包有好多化蛇添足的地方,这个后面再说
第一:这是一个立即执行/自调用的函数(function(){}())并将该函数的返回值赋值给全局变量a
(function(){}())
a
第二:看看这个函数执行之后做了什么
创建内部变量i(对外不可见);
创建内部变量fn(对外不可见);
创建对象{fa: function(){fn()}} === {fa: fn}并作为返回值返回给全局变量a;
{fa: function(){fn()}}
{fa: fn}
第三:执行阶段
调用a.fa函数,本质上调用了fn函数,也就是外部持有fn函数的一个副本,内部变量fn没有随着函数的执行结束消亡,常驻内存
a.fa
fn
fn函数的执行会alert(i++)其实,即使不对i进行任何操作,fn依然持有内部变量i的一个副本,内部变量i没有随着函数的执行结束消亡,常驻内存
alert(i++)
i
结论: 这里是比较典型的间接引用i,fn的例子通过未命名的返回对象
扩展:
var a = (function() { var i = 0; function fn() { alert(i++); } return fn; }()); a();// 0 a();// 1
这个直接引用了fn间接引用了i
发个链接吧http://zonxin.github.io/post/...
我这篇文章应该能帮助到你--https://segmentfault.com/a/11...
楼上说得很对, 补充一下!
JavaScript有自动垃圾回收机制: 执行环境会负责管理代码执行过程中使用的内存,在开发过程中就无需考虑内存分配及无用内存的回收问题了。JavaScript垃圾回收的机制很简单:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是时时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。
这里主要用到标记清除和引用计数, 所以你需要去了解下JavaScript的自动垃圾回收机制.
可以看看这篇文章, 希望对你有所帮助!
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
首先一个变量能够一直停留在内存中的条件是什么?
能够被外部引用,而且是一直引用
这种引用不限于直接引用,还包括间接引用以及循环引用
接下来你需要了解一定的JS内存结构的知识了
先分析函数
其实这个闭包有好多化蛇添足的地方,这个后面再说
第一:这是一个立即执行/自调用的函数
(function(){}())并将该函数的返回值赋值给全局变量a第二:看看这个函数执行之后做了什么
创建内部变量i(对外不可见);
创建内部变量fn(对外不可见);
创建对象
{fa: function(){fn()}}==={fa: fn}并作为返回值返回给全局变量a;第三:执行阶段
调用
a.fa函数,本质上调用了fn函数,也就是外部持有fn函数的一个副本,内部变量fn没有随着函数的执行结束消亡,常驻内存fn函数的执行会alert(i++)其实,即使不对i进行任何操作,fn依然持有内部变量i的一个副本,内部变量i没有随着函数的执行结束消亡,常驻内存结论: 这里是比较典型的间接引用
i,fn的例子通过未命名的返回对象扩展:
这个直接引用了
fn间接引用了i发个链接吧
http://zonxin.github.io/post/...
我这篇文章应该能帮助到你--https://segmentfault.com/a/11...
楼上说得很对, 补充一下!
JavaScript有自动垃圾回收机制:
执行环境会负责管理代码执行过程中使用的内存,在开发过程中就无需考虑内存分配及无用内存的回收问题了。JavaScript垃圾回收的机制很简单:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是时时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。
这里主要用到标记清除和引用计数, 所以你需要去了解下JavaScript的自动垃圾回收机制.
可以看看这篇文章, 希望对你有所帮助!