0

我正在编写 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";
}

并通过使用 callback.call(window) 或类似的东西来更改我的库中的执行上下文,这可能吗?

4

2 回答 2

0

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

例如:window.var = "Hello"

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

于 2015-10-20T10:44:25.077 回答
0

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

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

如果您的代码已经在范围内运行,您可以继续执行以下操作:

(function(global){
    // my logic
    global.myVar = "a value";
})(this);
于 2015-10-20T10:46:44.977 回答