Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не удаляется функция созданная как объект? (https://javascript.ru/forum/misc/45557-pochemu-ne-udalyaetsya-funkciya-sozdannaya-kak-obekt.html)

ryh 05.03.2014 16:59

Почему не удаляется функция созданная как объект?
 
Пример кода

var f = new Function (alert('hello'));
f=null;
f();


продолжает работать.

Почему?

animhotep 05.03.2014 17:12

ошибку же пишет error: 'f' is not a function
а какой реакции вы ожидали?

nerv_ 05.03.2014 17:15

var f = new Function (alert('hello'));
f=null;
alert(f);


var f = new Function (alert('hello'));


Просто кто-то не знает как использовать конструктор new Function() :)

ryh 05.03.2014 17:17

Цитата:

Сообщение от animhotep (Сообщение 301299)
ошибку же пишет error: 'f' is not a function
а какой реакции вы ожидали?

дык пишет hello, вот в чем дело.

так, понял, это alert а не ф-я. Но тогда вопрос почему такое только через объектный синтаксис происходит.

Цитата:

Просто кто-то не знает как использовать конструктор new Function()
все, вроде понял. спасибо.

nerv_ 05.03.2014 17:26

Цитата:

Сообщение от ryh
почему такое

Что "такое"?

var f = (alert('hello'));

ryh 05.03.2014 17:31

Цитата:

Сообщение от nerv_ (Сообщение 301302)
Что "такое"?

var f = (alert('hello'));

Т.е. короче говоря, при синтаксисе new Fubction, alert('hello') берется из контекста window а не из LexicalEnvironment и потому не сгорает при уничтожении функции?

nerv_ 05.03.2014 17:34

Не буду ничего объяснить, для тех кто не может прочитать по ссылке :)
Могу только сказать, что ты ерунду пишешь:
Цитата:

Сообщение от ryh
Т.е. короче говоря, при синтаксисе new Fubction, alert('hello') берется из контекста window а не из LexicalEnvironment и потому не сгорает при уничтожении функции?


ryh 05.03.2014 18:07

Цитата:

Сообщение от nerv_ (Сообщение 301306)
Не буду ничего объяснить, для тех кто не может прочитать по ссылке :)

И где ты видишь тут противоречие? В том что по ссылке написано лишь что для new Function. [[scope]] всегда берется из window.
Я и говорю что след-но alert в данном случае принадлежит window а не lexicalenv и потому обnullуние функции на вызов не влияет.

nerv_ 06.03.2014 00:06

Цитата:

Сообщение от ryh
Я и говорю что след-но alert в данном случае...

new Function() - конструктор. Аргументы СТРОКИ.

рони 06.03.2014 00:16

ryh,
:-?
var f = new Function (alert('hello'));
alert("f = "+f);


Часовой пояс GMT +3, время: 01:50.