分析一个闭包的例子

时间:2016-07-03 12:52:15

标签: javascript

看一下这个例子,当我们设置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

3 个答案:

答案 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