Я знаю, что эта форма:
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
, созданного определением, и его вообще не должно быть там?