2010-11-21 13 views
1

私はの値を警告関数に渡そうとしています。残念ながら、現時点ではが定義されていません。となります。私はその問題は、その機能がと呼ばれるときに、がもう存在しないからだと思う。どのようにしてpをその関数に渡して値を保持させるのですか?関数に変数を渡す(スコープの問題)

function B(p,u) { 
    var foo = {}; 
    foo[u] = function(p) { 
     alert('visit internal page '+p); 
    }; 
    $.router(foo); 
} 

B("about", "!/about"); 

答えて

3

ただ、このように、パラメータリストをそれを残して:

function B(p,u) { 
    var foo = {}; 
    foo[u] = function() { 
     alert('visit internal page '+p); 
    }; 
    $.router(foo); 
} 

現在あなたは内側の関数にパラメータpを指定していて、それは(いないようだと呼ばれていたときにそれが提供されますしない限り、より多くのローカルp変数はundefinedになります)。代わりにパラメータとして指定しないで、親スコープのpを使用します。

+0

私は予想よりも簡単でした!それがなぜ機能するのかわからない、私はいくつかの研究をする必要があります。答えをありがとう! – RichW

+1

@RichW - 親スコープ内のどの変数も使用可能ですが、*任意の*レベルの関数の任意のパラメータを指定する必要があります。したがって、 'function(p)'を持っていて 'foo [u ]() '、それは' undefined'になります...あなたはパラメータを渡さなかったので、親スコープ内のものだけを使うことができる 'もう意味をなさない? –

+0

今、完璧な意味があります、感謝ニック!残念ながら、あなたが何を入力するのか分からないので、Googleで研究するのは難しいような問題の1つです! – RichW

1

問題は、2つのpという変数が同時にあることです。

function B(outer_p, u) { // <- first p 
    var foo = {}; 
    foo[u] = function(inner_p) { // <- second p 
     alert('visit internal page '+ outer_p); // depending on what 
    };           // you want to display here 
    $.router(foo); 
} 
+0

私は、pの値が関数を継承することを望んでいました(それはそのようには動作しませんね!)。情報をありがとう! – RichW

+0

継承の意味は?外側の 'p'はあなたの内部関数で利用可能です。 **しかし**内部関数のパラメータリストに 'p'を宣言すると、デフォルトで' undefined'が割り当てられ、名前の衝突のため外側の 'p'を隠蔽します。 – galambalazs

関連する問題