MrFox
MrFox

Reputation: 11

I want to call javascript function from function, but it don't work

I'm getting this error

TypeError: Cannot read property 'sum' of undefined

How it fixed?

function calculator(firstNumber) {
    var result = firstNumber;

    function sum() {
    for (let i = 0; i <= arguments.lenght; i++) {
        result += arguments[i];
    }

    return result;
    }

    function dif() {
    for (let i = 0; i <= arguments.lenght; i++) {
        result -= arguments[i];
    }

    return result;
    }
}

var myCalculator = calculator(10);
console.log (myCalculator.sum(2, 3));
console.log (myCalculator.dif(1, 2, 5));

I need to get:

15

2

Upvotes: 0

Views: 49

Answers (1)

Nina Scholz
Nina Scholz

Reputation: 386570

You need the length property of arguments, iterate < arguments.length and return an object with the two wanted function.

While you take result as variable, it keeps the value from the former calculation. The result is in the first part 15 and later 7, instead of 2.

function calculator(firstNumber) {

    function sum() {
        for (let i = 0; i < arguments.length; i++) {
            result += arguments[i];
        }
        return result;
    }

    function dif() {
        for (let i = 0; i < arguments.length; i++) {
            result -= arguments[i];
        }
        return result;
    }

    var result = firstNumber;
    return { sum: sum, dif: dif };
}

var myCalculator = calculator(10);
console.log(myCalculator.sum(2, 3));
console.log(myCalculator.dif(1, 2, 5));

If you like to get always the result with firstNumber, you could initialize the result with firstNumber.

function calculator(firstNumber) {

    function sum() {
        var result = firstNumber;
        for (let i = 0; i < arguments.length; i++) {
            result += arguments[i];
        }
        return result;
    }

    function dif() {
        var result = firstNumber;
        for (let i = 0; i < arguments.length; i++) {
            result -= arguments[i];
        }
        return result;
    }

    return { sum: sum, dif: dif };
}

var myCalculator = calculator(10);
console.log(myCalculator.sum(2, 3));
console.log(myCalculator.dif(1, 2, 5));

Upvotes: 1

Related Questions