Почему методы копируются по значению?! Это же функции

'use strict';
var a = {
    m() {console.log('hello')}
};
var b = a.m;
a.m = null;
b();


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

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

По сути Объект это коробка, в которую можно всё что угодно класть и брать

let a = {
    m:()=>{console.log('hello');}
};
// m = Семечко
// a = Яблоко (с Семечкой)

const b = a.m; // к Б присваиваешь Семечку
a = null; // Яблоко с Семечкой удаляешь
b(); // Семечка

'use strict'; и var - означают старые стандарты

→ Ссылка
Автор решения: Alex Krass

Они копируются по ссылке и если вы скопировали ссылку на метод а var b = a.m;, то занулив ссылку у a.m, сам метод никуда не делся и у вас осталась ссылка на него в b.

'use strict';
var a = {
    m() {console.log('hello')}
};
var b = a.m;

//меняем переменную у a.m, по значению не должен изменить b
a.m.test = "10"; 
//один и тот же объект, следовательно копирование было не по значению
console.log(b.test);

→ Ссылка