Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialBhushan Manoharan
5,758 PointsQuestion on return statement in a function
I came across this question in one of the forum: Q: Will they both return the same thing? Why or why not?
function foo1() { return { bar: "hello" }; }
function foo2() { return { bar: "hello" }; }
I tried it in chrome console but I am getting different results on logging two functions result. I am not able to figure out why? Please help!
console.log(foo1()) returns - Object {bar: "hello"} console.log(foo2()) returns - undefined
6 Answers
Steven Parker
231,269 PointsThey look, and function, identically for me. Maybe you had a typo when you tried them.
I cut-and-pasted directly from your question above.
You say this was asked before? Can you provide a link to the original question?
alastair cooper
30,617 PointsThis answer comes from the following webpage where the question is asked: https://www.toptal.com/javascript/interview-questions
I tried to understand it so I could explain it to you better, but it is a little complicated. The way you have written it above, it will work, but if it is written like so:
function foo1()
{
return {
bar: "hello"
};
}
function foo2()
{
return
{
bar: "hello"
};
}
then it will return immediately after the return statement at the beginning of foo2
The reason for this has to do with the fact that semicolons are technically optional in JavaScript (although omitting them is generally really bad form). As a result, when the line containing the return statement (with nothing else on the line) is encountered in foo2(), a semicolon is automatically inserted immediately after the return statement.
No error is thrown since the remainder of the code is perfectly valid, even though it doesn’t ever get invoked or do anything (it is simply an unused code block that defines a property bar which is equal to the string "hello").
This behavior also argues for following the convention of placing an opening curly brace at the end of a line in JavaScript, rather than on the beginning of a new line. As shown here, this becomes more than just a stylistic preference in JavaScript.
Sorry if this is not very clear
Alastair
Steven Parker
231,269 PointsThat extra newline tells the whole story. It wasn't present in the question above!
The curly brace argument only applies to object literals, for code blocks putting them on the next line is fine.
Bhushan Manoharan
5,758 PointsHi Alastair and Steven, Thanks for replying back but what I am trying understand is why the placement of curly braces is making difference in the output. What is the right way to place the curly braces in the program. One of the video in Treehouse explains that Javascript ignores the blank spaces then why this difference in placement of curly brace.
alastair cooper
30,617 PointsIf the opening curly brace is not on the same line, then the javascript compiler will add a semi-colon. This means the function finishes on that line and the rest is not read. If you add the brace at the end of the line then it will not insert the semi-Colon and the function is fine
Steven Parker
231,269 PointsAlastair was familiar with the original question, and he explained it. Note that when you re-type the functions on a single line, the problem goes away.
The catch is that a return statement doesn't have to have a value, so if you skip to the next line, it returns from the function without a value (showing "undefined").
But when you put any part of a value to return, in this case the opening brace of a literal object, it will return the entire value. The fact that it's a brace is not important. What matters is whether or not the return is on a line by itself.
Bhushan Manoharan
5,758 PointsCool! Thanks guys. Got it now :)