正在使用var foo = function foo() {};在IE中创建内存泄漏的表达式<9.
Is using var foo = function foo() {}; expression creating a memory leak in IE < 9?
我知道这个表单:
var foo = function bar() {};
将把bar
的名称泄露给封闭作用域,并在jscript
中创建两个函数。
var foo = function foo() {};
?
它仍然泄漏的名称封闭作用域,但它在那里无论如何(感谢var foo
)。
我知道它将在整个范围内定义,但它会创建两个函数并立即解引用/销毁其中一个,还是这仍然会导致泄漏?
在这种情况下:
var bar = function() {
foo();
var foo = function foo() {};
}
在bar()
内部会有两个函数对象吗?
编辑
Ok,它绝对创建了两个函数对象,现在的问题是:由命名定义创建的函数是否在var foo
行之后被GC解引用和清理,所以在上面的代码中任何时候都没有超过一个"活动"的foo
实例?
或者IE会让它永远悬空,因为没有办法"解引用"由定义创建的foo
,它甚至不应该在那里?
在解析语句var foo = function foo() {};
时,var foo
声明很可能在执行 function foo(){}
之后被赋值为。
这意味着function foo
将在全局作用域中定义,通常是window
。
之后,var foo
被分配,从而将window.foo
隐藏在foo
的作用域中。因此,实际上,您的代码定义了window.foo
或window.bar
,如果您的当前作用域仍然存在,它们不会被垃圾收集。
相关文章:
- if(foo!==null)的计算结果为true,即使foo为null
- 重复应用 d3 转换导致的内存泄漏
- 如何显示在给定极限内存在的所有素数
- IE7中的blockUI插件内存泄漏25kb
- 渲染<选项值=“;foo”;选择>在服务器上
- Javascript闭包-如何防止内存泄漏
- 基于订阅的nosql内存数据库
- 显示:阻止/无html元素,css.not从内存中释放
- jQuery Draggable:内存泄漏
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- 元素过多的HTML内存使用情况
- 如何使用Javascript在FireFox中将html从内存动态加载到iframe中
- 为什么“foo()”在这里有效
- "检测到可能的EventEmitter内存泄漏”;使用Gulp+Watchify+Factor捆绑包
- Javascript图像数组预加载速度和从内存中删除
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- VBA加载网页并提取内存中的数据
- 是内存泄漏
- 将处理程序留在img.onload上是内存泄漏
- 正在使用var foo = function foo() {};在IE中创建内存泄漏的表达式<9.