Skip to content

Instantly share code, notes, and snippets.

@rwaldron
Created May 8, 2011 16:51
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rwaldron/961495 to your computer and use it in GitHub Desktop.
Save rwaldron/961495 to your computer and use it in GitHub Desktop.
Thinking outloud, exploring ideas that might compete with # or -> as function shorthands. Recreating examples form http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax
( ( <argument-list> ) <expression> | <block> )
var identity = (( x ) {
x; // with tail calls
});
var f = (( a, b, c ) {
// a, b, c
});
f( a, b, c );
var obj = {
f: () {
// who needs a label?
}
};
obj.f();
otherFunction( "arg", ( /.../ ) {
// used as a callback
});
// The following adapted from `strawman:arrow_function_syntax`
// Primary expression body [...]
let identity = ( (x) { x } );
// ...or...?
let identity = ( (x) x ); // bad
// Lower-precedence expression with body. curly braces?
let square = ( (x) { x * x } );
// ...or...?
let square = ( (x) x * x ); // bad
// In cases where a function expression is expected, outer parens are omitted
setTimeout( () {
// do stuff
}, 1000 );
// returning, nesting & closures (narcissus parser testing)
(function( global ) {
global.Module = (() {
var identity = ((x) { x }),
square = ((x) { x * x }),
hasFoo = (( obj ) {
var ret = "no foo";
if ( obj.foo ) {
ret = "has foo";
}
ret;
});
return {
hasFoo: hasFoo,
identity: identity,
square: square
};
})();
})( this );
@rwaldron
Copy link
Author

rwaldron commented May 9, 2011

Thanks! That's very helpful, as I'm working on implementing these ideas in Narcissus and this feedback is incredibly useful

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment