Evgenij_nechujveter:
твой код можно представить немного по-другому для понимания сути
var a = [2,1];
var b = [9,5];
var mergeArray = function() {
var a, b, array; // изначально undefined
// поскольку в вызове функции ты не передал значения, чтобы присвоить их переменным a и b, они так и остаются undefined
// здесь ты пытаешься вызвать метод .concat() у undefined, должна вылетать ошибка по этому поводу
// ты ожидаешь что a и b будут взяты из глобального пространства, но этого не произойдёт, поскольку здесь внутри функции (то есть в локальном пространстве) ты объявил переменные c точно такими же идентификаторами, поэтому они "перетерут" глобальных "тёзок".
array = a.concat(b); // undefined.concat(undefined);
};
mergeArray();
нечистая функция (императивный подход)
либо не объявляешь локальные a и b (убираешь a, b из объявления функции) и работаешь напрямую с глобальными a и b
чистая функция (функциональный подход)
либо оставляешь как есть и просто вызываешь функцию с двумя аргументами (чтобы присвоить локальным a и b соответствующие массивы в качестве значений и ошибок не будет, поскольку у массивов есть метод
.concat()
"на вооружении")