我知道这种形式:
var foo = function bar() {};
会将名称泄漏bar
到封闭范围并在jscript
.
怎么样:
var foo = function foo() {};
?
它仍然将名称泄漏到封闭范围,但无论如何它都在那里(谢谢var foo
)。
我知道它将在整个范围内定义,但它会创建两个函数并立即取消引用/销毁其中一个函数,还是这仍然会导致泄漏?
在这个情况下:
var bar = function() {
foo();
var foo = function foo() {};
}
我们里面会有两个函数对象bar()
吗?
编辑
好的,它肯定会创建两个函数对象,现在的问题是:由命名定义创建的函数是否在行后被 GC 取消引用和清理,因此在上面的代码中的任何时刻var foo
都不会超过一个“活动”实例foo
?
或者 IE 是 IE 会让它永远悬而未决,因为没有办法“取消引用”foo
由定义创建的,而且它甚至不应该首先存在?