Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Пердача функции по ссылке. Где подвох? (https://javascript.ru/forum/misc/30979-perdacha-funkcii-po-ssylke-gde-podvokh.html)

Nubi 22.08.2012 14:58

Пердача функции по ссылке. Где подвох?
 
Всем привет!

К примеру, есть такой код:

function message (msg) {
    alert(msg);
}                           
var newMessage = message;        
message = null;        
newMessage("Hello!");

К сожалению не нашел как тут вставить код, что бы посетители могли его запустить, но не в этом суть.

Прошу объясните на пальцах такое поведение. Известно, что функции передаются по ссылке (поскольку они суть объекты). В данном случае идентификаторы message и newMessage это просто указатели на одну и ту же функцию. Почему когда я затираю один указатель (message = null) функция все еще доступна по второму указателю. Ведь по идее если я изменяю один указаетель, это должно отражаться и на всех остальных указателях. Но, по-моему я это не правильно понимаю... А что тут происходит на самом деле ? :help:

Dim@ 22.08.2012 15:12

Nubi,
когда вы пишите
message = null;

вы затираете лишь ссылку на функцию у этой переменной, а другая до сих пор ссылается на функцию пример:
function message (msg) {//в переменной message ссылка на эту функцию
    alert(msg);
}                          
var newMessage = message;   // у переменной newMessage ссылка на функцию, а не ссылка на ссылку переменной message   
message = null;//затираем ссылку в переменной message
newMessage("Hello!");//а переменная newMessage до сих пор ссылается на функцию, а не ссылку переменной message

Nubi 22.08.2012 15:19

Dim@,
Спасибо, теперь понятно ;)


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