javascript闭包

https://img1.mukewang.com/5bf8c4070001de8404140357.jpg这个i是为什么一直在内存中 麻烦各位前辈指导一下

慕斯709654
浏览 559回答 1
1回答

拉莫斯之舞

首先一个变量能够一直停留在内存中的条件是什么?能够被外部引用,而且是一直引用这种引用不限于直接引用,还包括间接引用以及循环引用接下来你需要了解一定的JS内存结构的知识了先分析函数var a = (function() {  var i = 0;  function fn() {    alert(i++);  }  return {    fa: function() {      fn();    }  }}());a.fa();// 0a.fa();// 1其实这个闭包有好多化蛇添足的地方,这个后面再说第一:这是一个立即执行/自调用的函数(function(){}())并将该函数的返回值赋值给全局变量a第二:看看这个函数执行之后做了什么创建内部变量i(对外不可见);创建内部变量fn(对外不可见);创建对象{fa: function(){fn()}} === {fa: fn}并作为返回值返回给全局变量a;第三:执行阶段调用a.fa函数,本质上调用了fn函数,也就是外部持有fn函数的一个副本,内部变量fn没有随着函数的执行结束消亡,常驻内存fn函数的执行会alert(i++)其实,即使不对i进行任何操作,fn依然持有内部变量i的一个副本,内部变量i没有随着函数的执行结束消亡,常驻内存结论: 这里是比较典型的间接引用i,fn的例子通过未命名的返回对象扩展:var a = (function() {  var i = 0;  function fn() {    alert(i++);  }  return fn;}());a();// 0a();// 1这个直接引用了fn间接引用了i
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript