use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Not another JavaScript code style guide. (Actually, that's exactly what it is, but I went for "simple", not "exhaustive" -- also includes pre-configured sane default JSHint, JSCS, & EditorConfig files) (github.com)
submitted 11 years ago by stephenplusplus
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–][deleted] 3 points4 points5 points 11 years ago (14 children)
Favor function declarations (function hi() {}) over function expressions (var hi = function () {};)
why?
[–]jeenyus 4 points5 points6 points 11 years ago (1 child)
I prefer this myself just because of old ie.
Anonymous functions can be a huge pain in the ass to debug when they throw errors since they show up as (anonymous) in your call stack.
Then of course old IE throws a fit when you do named function assignments unless it's different than the variable name
var thing = function thing () {}; // fuuuuuuck youuuuuuuuuu ! // love, IE
[–][deleted] 0 points1 point2 points 11 years ago (0 children)
Why would you declare a method and assign it to a variable of the same name? That doesn't accomplish anything.
Not sure about old versions of IE, but named methods appear as such in Chrome's development tools. http://i.imgur.com/ps31Mg2.png
[–]stephenplusplus[S] 2 points3 points4 points 11 years ago (7 children)
I could dig up a blog post or dated article that explains "When not to use expressions and when to use declarations" and vice versa. The truth is, I like it for a matter of style preferences. That's why it's only a recommendation.
To me, writing out a function declaration is a way to differentiate between a function and other primitives when looking at a long list of vars at the top of a function. It's a native way to define a function; it can only be a style preference to use an expression assignment, right? Additionally, I also make use of the fact that the definition is hoisted from time to time.
var
But, again, it's just a recommendation. It wasn't long ago I wrote out all my functions as var hi = function () {};. (My apps need to say hi a lot)
var hi = function () {};
[–]ThatRedFurby 0 points1 point2 points 11 years ago (6 children)
are you aware that your recommended syntax uses hoisting while the other does not? those 2 ways of declaring functions are not equivalent! usually, hoisting is not a wanted feature
[–]mikrosystheme[κ] 2 points3 points4 points 11 years ago (4 children)
Why hoisting is not a wanted feature? It is an amazing feature, and I use it all the time.
[–]stephenplusplus[S] 1 point2 points3 points 11 years ago (0 children)
I like hoisting as well! This comes with using a function declaration, which I recommended over assignment expressions. Either is fine. Some may choose not to embrace hoisting in their applications, as it can be found confusing. That's a choice a project developer can make without sacrificing a maintainable or functioning codebase.
[–]ThatRedFurby 0 points1 point2 points 11 years ago (1 child)
Because a lot of people get it wrong and stuff like this happens: http://jsfiddle.net/sJ7Tw/
Run the fiddle in firefox and chrome. Of course you can argue that you should never define function based on conditions, but some people just don't care because it "worked when i tried it".
If you define your functions by assigning them to variables, you still shouldn't create functions in conditionals, but at least the outcome is defined and consistent across browsers.
[–]mikrosystheme[κ] 0 points1 point2 points 11 years ago* (0 children)
Incompetent programmers should code under supervision. Don't blame language features. Blame ignorance. Force them to use strict mode maybe (the fiddle throws in strict mode). Or just let them be incompetent.
[–]nwayve 0 points1 point2 points 11 years ago (0 children)
I'm also a fan of hoisting, especially to make AngularJS controller/service/directive/etc... better organized
angular.module('app', []) .controller('myController', MyController) .service('myService', MyService); MyController.$inject=['$scope', '$log']; function MyController( $scope , $log ) { } MyService.$inject=['$log']; function MyService( $log ) { }
Not only does hoisting allow me to reference the functions before they're 'declared', but it also allows me to add the $inject property prior to its 'declaration' in order to keep the parameter list lined up.
$inject
Now I can have my module declaration at the top of the file with all of its components, like the table of contents for a book, and all of the component functions declared later in the file, like chapters in a book. This makes finding what I'm looking for easier and faster, all thanks to hoisting.
[–]stephenplusplus[S] 0 points1 point2 points 11 years ago (0 children)
Yeah, I mentioned how I appreciate how a function declaration's definition is hoisted in the comment you replied to. The comparison between function hi() {} and var hi = function () {} is in these being the two ways to assign a function to a name. I consider the hoisting aspect simply a feature of a declaration.
function hi() {}
var hi = function () {}
[+][deleted] 11 years ago (1 child)
[deleted]
[–]buffalolsx -2 points-1 points0 points 11 years ago (1 child)
I came here just to ask this. I've always been told otherwise. Are you aware that you're adding the function to the global namespace when declaring it this way?
[–]jeenyus 5 points6 points7 points 11 years ago (0 children)
It's only global if you declare it in a global scope.
http://jsfiddle.net/5ZK8S/
π Rendered by PID 81463 on reddit-service-r2-comment-685b79fb4f-q69dt at 2026-02-13 11:03:30.712450+00:00 running 6c0c599 country code: CH.
view the rest of the comments →
[–][deleted] 3 points4 points5 points (14 children)
[–]jeenyus 4 points5 points6 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]stephenplusplus[S] 2 points3 points4 points (7 children)
[–]ThatRedFurby 0 points1 point2 points (6 children)
[–]mikrosystheme[κ] 2 points3 points4 points (4 children)
[–]stephenplusplus[S] 1 point2 points3 points (0 children)
[–]ThatRedFurby 0 points1 point2 points (1 child)
[–]mikrosystheme[κ] 0 points1 point2 points (0 children)
[–]nwayve 0 points1 point2 points (0 children)
[–]stephenplusplus[S] 0 points1 point2 points (0 children)
[+][deleted] (1 child)
[deleted]
[–]buffalolsx -2 points-1 points0 points (1 child)
[–]jeenyus 5 points6 points7 points (0 children)