Jorge (2013-06-01T23:52:00.000Z)
github at esdiscuss.org (2013-07-12T02:27:36.784Z)
On 02/06/2013, at 01:22, Brandon Benvie wrote: > On 6/1/2013 3:44 PM, Jorge wrote: >> But they're not fully interchangeable, for example I can exit a function at any point with a return, but can I exit a block at any point with a break or something? > > ```js > block: { > if (true) { > break block; > } > } > ``` What might happen with this is that if you concatenate a bunch of .js files that use this pattern, they might end redefining the same label (which would be an error, I guess). Wrapping it all in another block would solve that? ```js { block: { if (true) { break block; } } } ``` But then... I'm not sure this is any better than an IIFE! >> Also a function returns a value, does a block evaluate to something? In any case, I would really like to know which parenthesis or curly braces can I leave out in an immediately invocated arrow function expression, for example this: `var x= (=>{ //... })();` Is it correct ES6? Is there anything else that I could rmv in that IIAFE? Thank you! > > You can only get the return value of a block using eval. I knew that ;-P > However you can accomplish the same task by assigning to some outside variable. > > ```js > let x; > block: { > x = 20; > // do some stuff > if (condition) { > break block; > } > x = 30; > } > ``` But that's a bit awful, isn't it? When it's wrapped in an IIFE the code inside the block needs to know nothing about the outside var. > Some fun stuff you can do with eval: > > ```js > console.log(eval("block: { 'a'; if (Math.random() > .5) break block; 'b' }")) > ``` Cool :-)