what the statement script que node missing form es6 enable javascript strict-mode

javascript - the - ¿Cómo obtener la persona que llama desde el modo estricto?



use the function form of use strict (1)

Se puede mezclar código estricto y no estricto. Pero no puede usar la persona que llama aunque la llamada no esté en un código estricto. ¿Alguien sabe alguna solución?

Intenté esto:

(function strict(){ "use strict"; nonStrict();//ok nonStrictCaller();//error :( })(); function nonStrict(){ return 011;//Octal literals are not allowed in strict mode } function nonStrictCaller(){ return nonStrictCaller.caller; }


Aquí hay un hack malvado que solo funciona en V8. La versión de 140 bytes :

function x(a,b,c){function d(e,f){d=f}c=(b=Error)[a=''prepareStackTrace''];b.captureStackTrace(b[a]=d,x);d.stack;b[a]=c;return d}

Y la versión menos críptica.

if (''captureStackTrace'' in Error) { void function(){ function prepare(e, callsites){ return callsites; } function stack(f){ var e = {}; var oldPrepare = Error.prepareStackTrace; Error.prepareStackTrace = prepare; Error.captureStackTrace(e, f || stack.caller); e = e.stack; Error.prepareStackTrace = oldPrepare; return e; } function lastReceiver(){ return stack(lastReceiver)[2].receiver; } var CallSite = stack()[0].constructor; var callsiteMethods = {}; Object.getOwnPropertyNames(CallSite.prototype).forEach(function(key){ if (/^is|^get/.test(key)) { callsiteMethods[key.replace(/^is|^get/, '''')] = CallSite.prototype[key]; } callsiteMethods.location = CallSite.prototype.toString; }); CallSite.prototype.resolve = function resolve(){ for (var k in callsiteMethods) this[k] = callsiteMethods[k].call(this); } }(); }