Да, то, что я хочу, можно реализовать через return в функции, но меня волнует мой вопрос.
Почему arr не меняется при использовании функции?
function filterRange(arr, start, end) {
arr = arr.filter(item => (item >= start && item <= end));
}
let arr = [5, 3, 8, 1];
let filtered = filterRange(arr, 1, 4);
alert( filtered ); // 5, 3, 8, 1
alert( arr ); // 5, 3, 8, 1
function filterRange(arr, start, end) {
// т.к. ссылка на объект является значением, ф-ция получает копию этой ссылки
arr = arr.filter(item => (item >= start && item <= end));
// arr = ... - меняет копию ссылки, из-за этого изменения и не видны снаружи;
// в данном случае ссылке arr присваивается новый массив -
// arr.filter(item => (item >= start && item <= end));
}
let arr = [5, 3, 8, 1]; // arr - ссылка на место в памяти где лежит массив [5, 3, 8, 1];
let filtered = filterRange(arr, 1, 4); // ссылка передается аргументом в функцию;
alert( filtered ); // 5, 3, 8, 1
alert( arr ); // 5, 3, 8, 1
Дело в следующем... Аргументы ф-ции передаются по значению и ф-ция принимает только копию этого значения, а в JavaScript-е ссылки на объекты являются значениями. Т.е. в данном случае, ты перезаписываешь копию ссылки аргумента(массива), из-за этого изменения не видны снаружи. Но если ты изменишь сам объект,а не ссылку (например arr.push(20)), то внешний массив изменится.
function filterRange(arr, start, end) {
return arr.filter(item => (item >= start && item <= end));
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости