Skip to content

WTF does this code do?

benvan.co.uk
10 pointsbenvan8 comments
On HN

Comments

This is why you should always use semicolons in JavaScript. Omitting semicolons here turns this:

  var angry = say('Garrrr!')
  
  // what should I say?
  (amIHappy ? happy : angry)()
into this:
  var angry = say('Garrrr!')(amIHappy ? happy : angry)()

Most web browsers (if you're running this code in a web browser), will do ASI (automatic semicolon insertion).

http://jsfiddle.net/CxUXh/ works fine in Chrome, changing the console.log to an alert.

Not that I'm advocating omitting semicolons!

Interesting - your jsfiddle exhibits broken behaviour (alerting 'garrr') on my browser - chrome 33.0.1750.152. I believe I'm fairly up to date.

You're correct, I thought that was expected behavior, my mistake. TBH though, I'm surprised ASI didn't fix the problem, I'll have to look at the rules for insertion again.

Does it return that because `say` isn't defined inside its own function definition, so it evaluates as false?

It doesn't seem to do anything.

Hahaha, nice!

I'm getting a linter.

this is idiotic

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.