2017-01-06 15 views
2

関数が定義されていないときに呼び出されたときに有効な変数スコープを使用するように、javascriptのレキシカルスコープを変更することはできますか?一言で言えば、関数に関連付けられたスコープチェーンを変更できますか?このためjavascriptで語彙スコープをオフにする

例: Iエラーメッセージを取得せずに、このような何かを実行できるようにしたいと思い、そのYが定義されていない。

function f(){y+2}; 
function g(){ 
var y=2; 
f(); 
return y; 
} 
g(); 
+1

それには問題があります:引数。 –

+1

'関数f(y){return(y + 2)};'を呼び出し、それに応じて呼び出しを変更します。 –

+0

'eval'、noを使うのとは別に、なぜあなたはこれが必要だと感じますか? –

答えて

0

あなたの質問が原因あなたの誤解であることができます問題。 yは、f()の機能スコープでは定義されておらず、決して値を割り当てません。 g()yは、その機能にスコープが設定されています。あなたの例では

function f(){ y+2 }; 
function g(){ 
    var y=2; 
    f(); 
    return y; 
} 
g(); 

g()はグローバルyを使用した場合は、f()yは、実行時に定義されます。 varキーワードをg()にドロップして、コンパイル時にグローバルyを作成します。

function f(){ y+2 }; 
function g(){ 
    y=2; 
    f(); 
    return y; 
} 
g(); 

注:がグローバルに作成このような変数は可能ですが、推奨ませスコープ。あなたの例は考案されており、範囲を理解するためにしか使われていないので、何も傷つけることはありません。

関連する問題