2011-08-02 23 views
2

我想知道如何用來自不同本地作用域的數據調用eval()。在不同的本地作用域使用eval()

喜歡的東西:

function doSomething() { 
    var y = 1; 
    print_and_eval('y+1'); 
} 

function print_and_eval(data) { 
    print(data); 
    eval(data); 
} 

編輯: - 它是安全的在我的情況下使用eval()。請不要將此推薦爲解決方案。 - 主要的問題是,我在doSomething()中有局部變量,它們沒有在print_and_eval()中定義。然後評估會導致「ReferenceError:y未定義」錯誤。

js> print_and_eval('var a = {x:1}') 
var a = {x:1} 
js> print_and_eval('print(a.x)')  
print(a.x) 
typein:3012: TypeError: a is null 

我想接收在這種情況下輸出「1」。

+1

AFAIK,有沒有簡單的方法來在Javascript中做到這一點。然而,對於所謂的「本地範圍」,另一個更具體的術語通常稱爲「綁定範圍」或「綁定上下文」,指的是變量所綁定的值。 –

+0

感謝您的提示! – calquin

+0

你能舉一個更具體的例子嗎?我相信只要傳遞一個函數就可以解決問題(帶上下文) –

回答

1

同意「不使用eval」的其他評論。

話雖這麼說,另一種替代它成爲全球將它傳遞給其它功能:

function doSomething() { 
    var y = 1; 
    print_and_eval('y+1', y); 
} 

function print_and_eval(data, y) { 
    print(data); 
    eval(data); 
} 

這顯然需要你知道前手的變量名。