Refer to Indirect eval call, which gives more details about it.
( 0 , b.c ) ( ) |____| |_____| |_____| Literal Operator Identifier |_________________________| Expression |______________________________| PrimaryExpression |______________________________| |________| MemberExpression Arguments |________________________________________________| CallExpression
We can use the comma operator to fashion an indirect call to b.c which will force it to execute in the global context, the value of a is 1 in the global context.
Also the result of (b.c = b.c)() is 1
> (b.c = b.c)() 1
Speaking in terms of ECMAScript, this is because both — comma operator (in (0, b.c) example) and = operator (in (b.c = b.c) example) perform GetValue on its operands.
Other indirect call formats as below
> (b.c, b.c)() 1 > (1? b.c: 0)() 1 > (__ = b.c)() 1
thisis not an "execution context."this, but thethisis not the execution context, it's a property of it. More specifically, thethisbinding is a property of the execution context's lexical environment (or thethisbinding of an enclosing context's lexical environment, if the execution context's lexical environment doesn't have one, as happens with ES2015 arrow functions). §8.3 is a good place to start. Warning: The 5th edition spec was turgid, but the 2015 one is even worse. :-)(0, _.Em)()