2015-10-20 30 views
0

我正在編寫提取Javascript塊以合併,縮小和異步執行它們的php框架。我可以在沒有eval的全局執行上下文中運行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(窗口)或類似的東西,改變我的lib中的執行上下文,這可能嗎?

回答

0

是的。您可以將其添加到窗口/文檔對象。

例如:window.var = "Hello"

當使用它可以從任何地方訪問的窗口對象。你也可以創建你自己的全局對象。

+0

thnak你但我無法改變包裝代碼 –

+1

@Keywan Ghadami你是什麼意思? – Manu

+0

代碼var global =「Hello World」代表其他開發人員編寫的JavaScript示例,並且應該繼續運行。即使它包裝在我的代碼中。我無法改變這些代碼,只能改變它的包裝方式。 –

0

您也可以聲明你的變量在全球範圍內,然後在一個範圍初始化:

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

如果你的代碼已經是一個範圍內運行,您可以繼續使用此:

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

謝謝,但我無法更改包裝的代碼。 –

相關問題