2011-08-02 5 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 is not defined'エラーが発生します。

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

「評価を使用しない」という他のコメントに同意します。

言われていること、それがグローバルであることに別の代替は、他の関数に渡すために、次のようになります。

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

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

は、これは前に手変数名を知るためにあなたを明らかに必要となります。

関連する問題