我可以在没有eval的情况下在全局执行上下文中运行javascript

时间:2015-10-20 10:37:53

标签: javascript executioncontext

我正在编写php框架,它提取Javascript块以合并,缩小和异步执行它们。

所以我想延迟Javascript代码的执行,为此我在

中包装javascript
MyLib.then(function(){
//orignial code from the templates....
}

除非包装代码需要创建全局变量,否则这样可以正常工作 (我不是包装代码的作者,所以我不想修复该代码) 相反,我喜欢在全局执行上下文中运行该代码。

例如:

//excample code not within my controle  
var global="Hello World";

会变成:

MyLib.then(function(){
   //excample code not within my controle  
   var global="Hello World";
}

现在的解决方案是将javascript放入字符串然后

MyLib.then(function(){
     $.globalEval("var global=\"Hello World\"";");
}

或我的库中的globalEval调用

MyLib.then("var global=\"Hello World\"";")

但我想坚持使用更好的可读版本,这对于框架用户来说也更容易调试。

MyLib.then(function(){
   var global="Hello World";
}

使用,更改我的lib中的执行上下文 callback.call(窗口)或类似的东西,这可能吗?

2 个答案:

答案 0 :(得分:0)

是的。您可以将其添加到窗口/文档对象中。

例如:window.var = "Hello"

使用窗口对象时,可以从任何地方访问它。您也可以创建自己的全局对象。

答案 1 :(得分:0)

您还可以在全局上下文中声明变量,然后在范围内初始化它:

var globalVariable;
MyLib.then(function(){
    globalVariable = "a value";
});

如果你的代码已在范围内运行,你可以继续这样做:

(function(global){
    // my logic
    global.myVar = "a value";
})(this);