Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2017, 10:19
Новичок на форуме
Отправить личное сообщение для Serg22 Посмотреть профиль Найти все сообщения от Serg22
 
Регистрация: 23.10.2017
Сообщений: 3

Объект Math в функциях
Доброго времени суток.
Каким образом метод Math изменяет содержание исходного массива, который был передан функции в качестве параметра? Насколько я знаю, внутри функции все переменные являются изолированными. Неужели я упустил что-то принципиальное? Пока только учусь)
Код прилагается.
var oldArray = [0.99, 1.01, 2.49, 3.51];
document.write("Исходный массив ДО вызова функции: " + oldArray.join(", "));
function fun1(array) {
    var temp;
    for(var i = 0; i < array.length ; i++) { 
        temp = array[i];
        array[i] = Math.ceil(temp);
    }
    array = [0, 0, 0, 0];
    document.write("<br>Массив в функции: " + array.join(", "));
    return array;
}
var newArray = fun1(oldArray);
document.write("<br>Исходный массив ПОСЛЕ вызова функции: " + oldArray.join(", "));
document.write("<br>Новый массив ПОСЛЕ вызова функции: " + newArray.join(", "));
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2017, 11:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от Serg22
Каким образом метод Math изменяет содержание исходного массива, который был передан функции в качестве параметра?
Ты передал не массив... Ты передал ссылку на массив.
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2017, 11:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Вот вариант именно с новым массивом...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
var oldArray = [0.99, 1.01, 2.49, 3.51];
document.write("Исходный массив ДО вызова функции: " + oldArray.join(", "));
function fun1(array) {
    var temp;
    for(var i = 0; i < array.length ; i++) { 
        temp = array[i];
        array[i] = Math.ceil(temp);
    }
    array = [0, 0, 0, 0];
    document.write("<br>Массив в функции: " + array.join(", "));
    return array;
}
var newArray = fun1(oldArray.concat());
document.write("<br>Исходный массив ПОСЛЕ вызова функции: " + oldArray.join(", "));
document.write("<br>Новый массив ПОСЛЕ вызова функции: " + newArray.join(", "));
</script>
</head>
<body>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2017, 12:30
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

можно также oldArray.slice()
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2017, 17:34
Новичок на форуме
Отправить личное сообщение для Serg22 Посмотреть профиль Найти все сообщения от Serg22
 
Регистрация: 23.10.2017
Сообщений: 3

Почему ссылка передается только на массив, а не на переменную тоже?
Если создать два скрипта, один с массивом с 1 элементом, а второй с переменной. То результат будет разным. В втором случае метод Math не будет изменять содержимое исходной переменной.
Где можно почитать годно изложенный материал на эту тему, чтобы понять суть?
Ответить с цитированием
  #6 (permalink)  
Старый 23.10.2017, 17:37
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Serg22, тут читали?
Ответить с цитированием
  #7 (permalink)  
Старый 24.10.2017, 08:49
Новичок на форуме
Отправить личное сообщение для Serg22 Посмотреть профиль Найти все сообщения от Serg22
 
Регистрация: 23.10.2017
Сообщений: 3

Ознакомился с материалом по ссылке, теперь все прояснилось. Спасибо! Вопрос закрыт.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полностью удалить объект 1lider Events/DOM/Window 8 07.06.2018 18:20
Добавить объект в другой объект фонарик Общие вопросы Javascript 5 11.10.2015 01:57
Ищу функцию для canvas, которая будет перемещать мой объект на позицию х,у eko24 Events/DOM/Window 0 12.10.2013 00:33
Создать объект в объекте Bryant-24 Общие вопросы Javascript 3 10.07.2013 16:06
Передать ссылку на объект а не объект возникновения события Blazze Events/DOM/Window 0 11.10.2011 00:45