我知道这种形式:
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由定义创建的,而且它甚至不应该首先存在?