我正在编写php框架,它提取Javascript块以合并,缩小和异步执行它们。
所以我想延迟Javascript代码的执行,为此我在
中包装javascriptMyLib.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(窗口)或类似的东西,这可能吗?
答案 0 :(得分:0)
是的。您可以将其添加到窗口/文档对象中。
例如:window.var = "Hello"
使用窗口对象时,可以从任何地方访问它。您也可以创建自己的全局对象。
答案 1 :(得分:0)
您还可以在全局上下文中声明变量,然后在范围内初始化它:
var globalVariable;
MyLib.then(function(){
globalVariable = "a value";
});
如果你的代码已在范围内运行,你可以继续这样做:
(function(global){
// my logic
global.myVar = "a value";
})(this);