Summary of JS high level programming / meta programming features
eval
Pass function as parameters:
Function methods (call, bind, apply...)
Every time a function is entered, a closure is created. If something inside that closure is referred (example by a return function) that closure is preserved.
function returnClosure(p1) { return function(p2){ return p1+p2;}}
New primitive in ES6. 'reflection within implementation' - sprinkle on existing classes & objects to change the behavior. See separate note.
Reflection is about discovery of low-level information of code (function name, arguments, etc.)
Use Function and Object prototype methods to explore function / object. (see separate notes)
typeof & instanceof
Proxy is about 'interception'