Почему метод не становиться null?

Читаю книгу по шаблонам проектирования js глава = "Объявление частных функций общедоступными методами"

Наткнулся на такой код

var myarray;
(function () {
 var astr = “[object Array]”,
 toString = Object.prototype.toString;
 function isArray(a) {
 return toString.call(a) === astr;
 }
 function indexOf(haystack, needle) {
 var i = 0,
 max = haystack.length;
 for (; i < max; i += 1) {
 if (haystack[i] === needle) {
 return i;
 }
 }
 return -1;
 }
 myarray = {
 isArray: isArray,
 indexOf: indexOf,
 inArray: indexOf
 };
}())

Почему если заменить функцию indexOf на null, метод inArray все равно будет ссылаться на старую indexOf? ведь функции же передаются ссылками.

myarray.indexOf = null;
myarray.inArray([“a”, “b”, “z”], “z”);

Почему inArray теперь не null??


Ответы (1 шт):

Автор решения: user469485

Потому-что изменится indexOf возвращаемого из немедленно вызываемой фукнции объекта, тоесть:

myarray = {
 isArray: isArray,
 indexOf: null,
 inArray: indexOf
 };

А inArray до сих пор держит ссылку на реализацию изначальной indexOf.

→ Ссылка