Проблемы Javascript с неработающей функцией (преобразует дроби в десятичные)

Скажем, у меня есть строка (например, дробь);

var num = "1/2";

Почему это работает:

var y = num.split(' ');
if (y.length > 1) {
    var z = y[1].split('/');
    var a = (+y[0] + (z[0] / z[1]));
    num = a;
} else {
    z = y[0].split('/');
    if (z.length > 1) {
        a = (z[0] / z[1]);
        num = a;
    }
}

alert(num); //The alert box shows my variable now as a decimal.

И это не:

function parseFractions(x) {
    var y = x.split(' ');
    if (y.length > 1) {
        var z = y[1].split('/');
        var a = (+y[0] + (z[0] / z[1]));
        x = a;
    } else {
        z = y[0].split('/');
        if (z.length > 1) {
            a = (z[0] / z[1]);
            x = a;
        }
    }
}

parseFractions(num); //Here I call my function.

alert(num);
//The alert box does not even show up. The fraction isn't converted into a decimal.

По сути, это одно и то же, единственное отличие состоит в том, что во втором я пытался превратить это в функцию, поэтому мне не нужно повторять эти строки кода каждый раз, когда я пытаюсь преобразовать дроби в десятичные.

Так что я делаю неправильно? Возможно ли то, что я пытаюсь выполнить с помощью функции? Любой свет в этом вопросе приветствуется!


person wessy    schedule 24.02.2015    source источник
comment
передать по ссылке и передать по значению.   -  person epascarello    schedule 24.02.2015
comment
Если alert не отображается, у вас есть ошибка времени выполнения. Вероятно, это простая проблема, и вы можете решить ее самостоятельно, если научитесь отлаживать JavaScript. Устанавливайте точки останова, проверяйте переменные... несложно выяснить, что происходит в вашем коде.   -  person Felix Kling    schedule 24.02.2015
comment
Uncaught type error: undefined is not a function позвольте мне найти источник этого   -  person Travis    schedule 24.02.2015


Ответы (2)


значение num не обновляется, оно не передается по ссылке.

function parseFractions(x) {
    var y = x.split(' ');
    if (y.length > 1) {
        var z = y[1].split('/');
        var a = (+y[0] + (z[0] / z[1]));
        x = a;
    } else {
        z = y[0].split('/');
        if (z.length > 1) {
            a = (z[0] / z[1]);
            x = a;
        }
    }
    return x;
}

num = parseFractions(num);  //set num with the value return from the method
alert(num);
person epascarello    schedule 24.02.2015
comment
Спасибо! Это сработало как заклинание, которое также научило меня чему-то новому. Это действительно правильный ответ. - person wessy; 24.02.2015
comment
@wessy: Итак, я предполагаю, что комментарий в коде //The alert box does not even show up. был неправильным. Он появляется, но вы не получаете ожидаемого результата. Если вы задаете вопрос, убедитесь, что вы все правильно описали. - person Felix Kling; 24.02.2015
comment
@Wyatt Я сделал, это не позволяет мне принять ответ в течение 5 минут, я думаю, поэтому мне пришлось подождать. - person wessy; 24.02.2015
comment
Это имеет смысл, теперь кто-то должен отредактировать его, чтобы я мог отменить голосование. - person Travis; 24.02.2015

Вам нужно вернуть свое значение

Добавьте возврат в конец вашей функции

return x;

Затем вызовите функцию с помощью

alert(parseFractions(num)); //Here I call my function.
person Cheruvian    schedule 24.02.2015
comment
Вам не нужно называть это так, посмотрите на мой пример. - person Travis; 24.02.2015