Edición: El eval problema plantea es que se ejecuta en el ámbito global
eval.call(document, "console.log(this)")
eval.call(navigator, "console.log(this)")
eval.call(window, "console.log(this)")
(function(){eval.call(document, "console.log(this)")})()
>Window
Escenario:
usted asume están utilizando atributos individuales en el código de marcado de varios docum ent-elementos tales como un atributo onvisible
<img src="" onvisible="src='http://www.example.com/myimg.png';">
¿Le gustaría obtener todos los elementos con este atributo, gire el contenido cuerdas onvisible en un cierre y ponerlo en una cola de manejador de sucesos. Aquí es donde el constructor de la Función JS entra en juego.
Function === 0..constructor.constructor
>true
Function('return [this, arguments]').call(window, 1,2,3)
>Window, Arguments[3]]
Function('return [this, arguments]').call(document, 1,2,3)
>Document, Arguments[3]]
Function('return [this, arguments]').call(navigator, 1,2,3)
>Navigator, Arguments[3]]
Poniendo todo junto:
var eventQueue = [];
var els = document.querySelectorAll('[onvisible]');
for (var el in els) {
var jscode = els[el].getAttribute('onvisible');
eventQueue.push({el:els[el], cb:Function(jscode)})
}
//eventQueue[0].cb.call(scope, args);
Tenga una mirada en: http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad -idea –
Creo que eval en este caso no es malo ... Tal vez deberías echarle un vistazo a esa pregunta: [¿Cuándo JavaScript's eval() no es malvado?] (http://stackoverflow.com/questions/197769/ when-is-javascripts-eval-not-evil) –