vitaly_74
@vitaly_74

JavaScript переопределяет значение переменной, но не так как требуется, в чем ошибка?

проблема следующая при вызове var mat1 = this.getFreeMatrix(mat, 0); переопределяется сама матрица в getResult хотя она переопределяться не должна, JavaScript, в getFreeMatrix, будто бы воспринимает переменную mat как глобальную. можно ли это как то исправить?
P. S. скрипт считает корни СЛАУ
equations = {

    /*
    * Получает коэффициенты при квадратичной регрессии
    * param matrix - матрица 3х4, 4 столбец - столбец свободных членов.
    * */
    getResult : function(mat) {
        var det = this.getDet(mat);
        var mat1 = this.getFreeMatrix(mat, 0);
        var mat2 = this.getFreeMatrix(mat, 1);
        var mat3 = this.getFreeMatrix(mat, 2);

        var det1 = this.getDet(mat1);
        var det2 = this.getDet(mat2);
        var det3 = this.getDet(mat3);
        if(det!=0) {
            return [det1 / det, det2 / det, det3 / det];
        }
        else{
            return [0,0,0];
        }
    },
    /*
     * возвращает определитель матрицы   (метод треугольников)
     * */
    getDet : function (matrix) {
        var det =
            matrix[0][0]*matrix[1][1]*matrix[2][2]+
            matrix[1][0]*matrix[2][1]*matrix[0][2]+
            matrix[0][1]*matrix[1][2]*matrix[2][0]-
            matrix[0][2]*matrix[1][1]*matrix[2][0]-
            matrix[0][1]*matrix[1][0]*matrix[2][2]-
            matrix[1][2]*matrix[2][1]*matrix[0][0];
        return det;
    },
    getFreeMatrix : function (mat,col){
        mat[0][col] = mat[0][3];
        mat[1][col] = mat[1][3];
        mat[2][col] = mat[2][3];

        return mat;
    }
}
matrix = [
    [2, 3, 4, 5],
    [6, 7, 8, 9],
    [10, 25, 13, 13]
]
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Объекты и массивы в JS передаются по ссылке. Так что меняя mat внутри функции вы меняете исходный массив.
https://learn.javascript.ru/object-reference
Ответ написан
@RuGrof
У меня для вас хорошие новости, по этому поводу можно почитать
https://learn.javascript.ru/object-reference
https://learn.javascript.ru/functions-closures
Вы передаёте везде ссылку на массив, вот он и меняется.
P.S. рекомендую для таких целей (как СЛАУ) использовать matlab.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы