¿Es posible usar el comando eval para ejecutar algo con un alcance global? Por ejemplo, esto causará un error:¿Eva de Javascript en alcance global?
<script>
function execute(x){
eval(x);
}
function start(){
execute("var ary = new Array()");
execute("ary.push('test');"); // This will cause exception: ary is not defined
}
</script>
<html><body onLoad="start()"></body></html>
Sé que el 'con' la palabra clave será establecer un ámbito específico, pero no es una palabra clave para el alcance global? ¿O es posible definir un ámbito personalizado que permita que esto funcione?
<script>
var scope = {};
function execute(x){
with(scope){
eval(x);
}
}
function start(){
execute("var ary = new Array()");
execute("ary.push('test');"); // This will cause exception: ary is not defined
}
</script>
<html><body onLoad="start()"></body></html>
En esencia, lo que estoy tratando de hacer es tener un Funciton ejecutar mundial ...
'eval.call (windwow, x); 'funcionó para mí, implementación entre navegadores. la razón es que el alcance global siempre debe ser el objeto 'ventana' y las funciones definidas posteriormente pertenecen a este objeto, como en' JSON.stringify', por ejemplo, no es más que 'ventana ['JSON'] ['stringify']' y evento 'ventana ['ventana'] ['ventana'] ['ventana'] ['ventana'] ['JSON'] ['stringify']'; ambos seguirán funcionando. –
¡Esto realmente ayuda! Tenía una "Fecha" establecida localmente por la función que me llamaba y quería la versión global del objeto Date que es window.Date. –
-1. Lee http://perfectionkills.com/global-eval-what-are-the-options/ sobre lo que realmente sucede. – Bergi