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

Can i run javascript in global execution context without eval

本文关键字:运行 javascript 没有 eval 上下文 全局 执行 我可以      更新时间:2023-09-26

我正在编写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)或者类似的东西,可能吗?

你也可以在全局上下文中声明你的变量,然后在作用域内初始化它:

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

如果你的代码已经在一个作用域中运行,你可以这样做:

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

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

例如:window.var = "Hello"

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