私はこのフォームを知っています:
var foo = function bar() {};
bar
は、名前を囲んでいるスコープにリークし、に 2 つの関数を作成しjscript
ます。
どうですか:
var foo = function foo() {};
?
それはまだ名前を囲んでいるスコープにリークしますが、とにかくそこにあります(thx to var foo
)。
スコープ全体で定義されることはわかっていますが、2 つの関数を作成し、そのうちの 1 つをすぐに逆参照/破棄しますか、それともまだリークを引き起こしていますか?
この状況では:
var bar = function() {
foo();
var foo = function foo() {};
}
内部に 2 つの関数オブジェクトがありbar()
ますか?
編集
OK、間違いなく 2 つの関数オブジェクトが作成されます。問題は、名前付き定義によって作成された関数が、var foo
行の後で GC によって逆参照およびクリーンアップされるかどうかです。そのため、上記のコードでは常に「ライブ」foo
インスタンスが 1 つしか存在しません。 ?
foo
それとも、定義によって作成されたものを「逆参照」する方法がなく、そもそもそこにあるべきではないため、IEであるIEは永遠にぶら下がったままになりますか?