Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.05.2018, 22:31
Аватар для Neor
Новичок на форуме
Отправить личное сообщение для Neor Посмотреть профиль Найти все сообщения от Neor
 
Регистрация: 12.11.2017
Сообщений: 8

Объяснение работы функции в js.
var abc = [];
var Answer = [];
var Button_dis = document.getElementById('button_discrim_graf');
var full_information = document.querySelector('#full_information');
var Answer_xy_1 = document.querySelector('#Answer_xy_1');
var Pressing_sensor_Button_dis = false;

Button_dis.addEventListener('keypress', function(event) {
    if (event.keyCode == 13) {
        Pressing_sensor_Button_dis = true;
    }
});

var score = document.querySelector('#entermass');
score.addEventListener("keypress", function(event) {
    if (event.keyCode == 13) {
        // получение массива

        abc = massivabc();
        Answer = discrim(abc);

        // отображение массива

        if (Pressing_sensor_Button_dis) {
            // скрытие Answer_xy_1. Отображение full information
            document.querySelectorAll('h2')[0].innerHTML = "Построение параболы";
            full_information.style.display = "";
            Answer_xy_1.style.display = "none";
            // вывод массива при отрисовке таблицы
            document.querySelector('#full_information > table > tbody > tr > td > p').innerHTML = Answer[0];
            document.querySelector('#full_information > table > tbody > tr > td:last-child > p').innerHTML = Answer[1];
            disGraph.height = parseInt(Button_dis.value);
            disGraph.width = parseInt(Button_dis.value);
            render(parseInt(Button_dis.value), abc);
        }
        document.querySelector('#Answer_xy_1').innerHTML = "x<sub>1</sub> = " + Answer[0] + "; x<sub>2</sub> = " + Answer[1];
    }
});

function massivabc() {
    var abcmass = [];
    var a = parseFloat(document.querySelectorAll('input')[0].value);
    var b = parseFloat(document.querySelectorAll('input')[1].value);
    var c = parseFloat(document.querySelectorAll('input')[2].value);
    abcmass = [a, b, c];
    return abcmass;
};

function discrim(abcmass) {
    // рассчет x1 и x2
    var x1 = ((-abcmass[1]) - Math.sqrt(abcmass[1] * abcmass[1] - 4 * abcmass[0] * abcmass[2])) / (2 * abcmass[0]);
    var x2 = ((-abcmass[1]) + Math.sqrt(abcmass[1] * abcmass[1] - 4 * abcmass[0] * abcmass[2])) / (2 * abcmass[0]);
    // вывод x1 и x2 через массив
    var masfunc = [+x1.toFixed(8), +x2.toFixed(8)];
    return masfunc;
};

function Coefficient_1(Table_size, array) {
    Table_size > 0 ? Table_size = Table_size * (-1) : Table_size = Table_size * (1);
    array[2] = array[2] - Table_size;
    var discriminant = array[1] * array[1] - 4 * array[0] * array[2];
    discriminant = Math.sqrt(discriminant);
    var x1 = (-array[1] - discriminant) / (2 * array[0]);
    var x2 = (-array[1] + discriminant) / (2 * array[0]);
    x1 = +Math.abs(x1).toFixed(15);
    x2 = +Math.abs(x2).toFixed(15);
    if (x1 > x2) {
        return (Math.ceil((x1 * 130) / 100));
    } else {
        return (Math.ceil((x2 * 130) / 100));
    }
};

// отрисовка canvas
function render(tale, array_abc) {
    var y = 0.0;
    var x = -(tale / 2) - 1;
    var Coefficient_0 = (Coefficient_1(tale, array_abc)) / 2;
    var flip_flopcoefficient_0 = 1 / Coefficient_0;
    y = -1 * (array_abc[0] * (x * x) + array_abc[1] * x + array_abc[2]);
    for (x = -(tale / 2); x < (tale / 2) + 1; x = x + 1 /*flip_flopcoefficient_0*/ ) {
        y = -1 * (abc[0] * (x * x) + abc[1] * x + abc[2]);
        ctx.lineTo(x, y);
    };
    //ctx.scale(2,1);
    ctx.stroke();

};


Проблема в следующем. При передаче массива (abc через array_abc) в Coefficent_1 и изменения локальной переменной array изменяется массив abc. Прошу объяснить. Именно объяснить, в чем ошибка. И в каком направлении стоит двигаться, для её решения. (Если что, из кода выкинуто ненужное. Я новичек).
Ответить с цитированием
  #2 (permalink)  
Старый 02.05.2018, 22:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Массивы как и прочие объекты передаются в js по ссылке. Вот и всё.
Если нужна копия массива внутри функции - надо делать оную явно:
array = array.slice(0);
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 02.05.2018, 23:14
Аватар для Neor
Новичок на форуме
Отправить личное сообщение для Neor Посмотреть профиль Найти все сообщения от Neor
 
Регистрация: 12.11.2017
Сообщений: 8

Спасибо большое. Добра тебе.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое подключение JS и вызов функции Paqwerty Events/DOM/Window 1 25.04.2017 16:33
AJAX Get и post вывод ответа по средствам return как оитог работы функции koeshiro AJAX и COMET 8 05.03.2015 09:00
Аналог php функции в JS ВэйДлин Общие вопросы Javascript 1 20.07.2011 01:03
Функции для работы с регулярными выражениями Joshka Общие вопросы Javascript 5 21.06.2011 00:00
вызов функции, из JS генерируемого на сервере subaru AJAX и COMET 1 12.07.2008 13:44