First of all, I apologize if this is a stupid question. It is very possible that I'm completely missing something trivial. I don't know what it is. So here's the problem:
(context: I'm making arbitrary precision math library in JavaScript)
Here's the code:
    function processInput(n){       
        let parts;
        let numer, denom, positivity;
        if(is.negative(n)){
            positivity = -1;
            n = n.substr(1);
        } else {
            positivity = 1;
        }
        ////////// RELEVANT SECTION STARTS ///////////////
        console.log(n); // prints "1 2/3", which is what I'm testing
        if(is.zero(n)){
            numer = [0], denom = [1], positivity = 0;
        } else if(is.mixedFrac(n)){
            console.log(n); // <------ error: "n is not defined". How???
            parts = n.match(/\d+/g).map(function(e){
                return ArrayOps.wholeToArnum(n);
            });
        ////////// RELEVANT SECTION ENDS ///////////////
            let w = parts[0], 
                n = parts[1],
                d = parts[2];
            let n1 = ArrayOps.multiply(w, d);
            numer = ArrayOps.add(n1, n);
            denom = d;
        } else if(is.frac(n)){
            parts = n.match(/\d+/g).map(function(e){
                return ArrayOps.wholeToArnum(e);    
            });
            numer = parts[0];
            denom = parts[1];
        } else if(is.repeatingDecimal(n)){
            let temp = n.split('...');
            let dec = ArrayOps.decToArnum(temp[0]);
            let decLength = dec.decLength;
            let repDec = ArrayOps.repDecToArnum(temp[1], decLength);
            let n1 = dec.numer;
            let d1 = dec.denom;
            let n2 = repDec.numer;
            let d2 = repDec.denom;
            n1 = ArrayOps.multiply(n1, d2);
            n2 = ArrayOps.multiply(n2, d1);
            numer = ArrayOps.add(n1, n2);
            denom = ArrayOps.multiply(d1, d2);
        } else if(is.decimal(n)){
            n = ArrayOps.decToArnum(n);
            numer = n.numer;
            denom = n.denom;
        } else if(is.wholeNum(n)){
            numer = ArrayOps.wholeToArnum(n);
            denom = [1];
        } else {
            throw new Error(`${n} is not a valid form of input.`);
        }
        return {numer, denom, positivity};
    }
(JS Fiddle: http://jsfiddle.net/k4mjwg57/3/)
Basically, this is what it comes down to:
function process(n){
  if(passTest(n)){
    console.log(n); // Error: "n is not defined"
  }
}
Here's the screenshot from debugging:

As I have highlighted in red rectangle, the debugger clearly shows n = "1 2/3", and it passes the test (is.mixedFrac(n)), because it is mixed fraction.
There's nothing in is.mixedFrac(n) that can change n.
Continuing produces the following error: 

If n wasn't defined in the first place, I shouldn't have passed the test. Can someone help me with what's going on? Again, I'm sure it's a trivial mistake. But I'm not seeing it.
Things to note:
- Changing the if control to if(is.mixedFrac(n) && n)still passes to inside the bracket
- I know screenshot is discouraged, but if you look at it, and I hover my mouse on nwhile on break point, it will still show thatnis"1 2/3".
- There is absolutely no async stuff going on. There's no timeout, ajax, promise, or anything going on. The entirety of my code is quite rudimentary.
- In FireFox, it gives me the following error: "ReferenceError: can't access lexical declaration `n' before initialization"
 
    