0

I am new to learning JavaScript and sort of stuck up while learning exception handling. I have understood the thing that whenever an exception occurs , it is thrown using "throw" keyword and similarly it is caught using "catch" block.

But what I am unable to understand is that , I have a small , simple code that demonstrates simple Exception handling technique, and in that code whenever I change the place of the catch block, I get different outputs. Here is the simple code and its different o/p s depending upon where I place the catch block.

function lastElement(array) {
     if (array.length > 0)
        return array[array.length - 1];
     else
        throw "Can not take the last element of an empty array.";
}

function lastElementPlusTen(array) {
     return lastElement(array) + 10;
}

try {
   print(lastElementPlusTen([])); 
}
catch (error) {
    print("Something went wrong: ", error);
}

the o/p that I get here is as expected :

Something went wrong: Can not take the last element of an empty array.

now when I add the try/catch block around the function lastElementPlusTen: like this

function lastElement(array) {
   if (array.length > 0)
     return array[array.length - 1];
   else
     throw "Can not take the last element of an empty array.";
}



 try  {

   function lastElementPlusTen(array) {
   return lastElement(array) + 10;
   }

 }
catch (error) {
    print("Something went wrong: ", error);
}


print(lastElementPlusTen([]));

now the o/p that I get here is :

Exception: "Can not take the last element of an empty array."

the "something went wrong" from the catch block is not printed.

why is this so??similarly when I place the try/catch block around different pieces of code (for ex: around the first function , body of the lastElementPlusTen function etc) I get different o/p s. why is this happening. How does exception handling work??

2
  • What JavaScript environment are you using? I'm just wondering as it doesn't seem to be a browser environment. Commented Oct 24, 2013 at 1:10
  • yes ! i am studying from "eloquent javascript" so i am using the console provided by them Commented Oct 24, 2013 at 1:18

2 Answers 2

1

The problem is that you're putting the try/catch around the function declaration -- the error is not thrown there, it's thrown when the function is actually invoked. So you need this instead:

// this code block will not throw any error, although it will when the function is invoked
function lastElementPlusTen(array) {
   return lastElement(array) + 10;
}

try{
    console.log(lastElementPlusTen([]));
}
catch (error) {
    console.log("Something went wrong: ", error);
}

Fiddle demo

Sign up to request clarification or add additional context in comments.

Comments

1

You are not catching the exception in your second case. It just throws the exception unhandled not printing it as you expect, place

print(lastElementPlusTen([]));

inside try..catch

Try:

function lastElement(array) {
    if (array.length > 0) return array[array.length - 1];
    else throw "Can not take the last element of an empty array.";
}

function lastElementPlusTen(array) {
    return lastElement(array) + 10;
}

try { //<-- this is where you need try.. catch not at the function definision
   print(lastElementPlusTen([])); //<-- this invokes the error.

} catch (error) {
    print("Something went wrong: ", error);
}

Demo Watch the console for the log

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.