看一下这个例子,当我们设置DataContext
;时,我很难理解幕后到底发生了什么。我的第一个想法是LiveViewModel lsVm = new LiveViewModel();
this.DataContext = lsVm;
var playingCollection = lsVm.Playing;
playingCollection.Insert(0, new Playing
{
Date = "03/07/2016",
Minutes = "5",
Home = "foo",
});
。但是当调用outerFunction = null
时,我们仍然可以获得猴子值。我确定这与范围有关,但我无法绕过它。另外,我如何解决此问题,以便在我致电function outerFunction(){ //nothing }
时,我也会referenceToInnerFunction
,因为选择referenceToInnerFunction
null
答案 0 :(得分:2)
现代javascript实现的垃圾收集器算法认为,当无法访问某些内容时,可以对其进行垃圾回收。此处referenceToInnerFunction
可以访问outerVar
,因为
var referenceToInnerFunction = outerFunction();
所以只要你保留一些可以访问它的内容,就不可能释放outerVar
。
更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
答案 1 :(得分:1)
您已经分配了ReferenceToInnerFunction变量内存空间,即使您更改了创建它的值,它也不会更改。 要重置变量,需要再次设置
ReferenceToInnerFunction = null
答案 2 :(得分:0)
如果将outerFunction设置为null,则内部函数仍然由外部函数限制/关闭,因此不能进行垃圾回收。 这就是为什么你可以访问outervar