2011-12-10 15 views
8
var str = 'internet'; 

performAction(function(str) { 
    console.log(str); 
}); 

プライベート変数strがあり、同じ名前のパラメータを持つコールバック関数を持つことに問題がありますか?JavaScript:他の変数と同じ名前のコールバック関数のパラメータ?

ありがとうございます!

+0

いいえ - 実際には同じ変数ではないことを忘れないでください。 –

+0

ありがとうございました! –

答えて

11

これは単なる標準的なスコープの状況です。これは、別の関数にパラメータとして渡される匿名関数式であるという事実は関係ありません。 performAction()関数の中では、コールバック関数のパラメータであるstrにアクセスすることはできません。performAction()strを参照すると、グローバルな「インターネット」変数(または独自のローカル変数strが定義されている場合)。

関数のパラメータはスコープの目的で、その関数のローカル変数と同じです。つまり、同じ名前の他の変数を外側のスコープからマスクしますが、より幅広く定義されていても異なる名前の変数にアクセスできます範囲。

var str = "internet"; 

(function(str) { 
    console.log(str); // "internet" 
    str = "local param"; 
    console.log(str); // "local param" 
})(str); 

console.log(str); // "internet" 

その場合は、私がstrと呼ばれるパラメータを持つ関数を持っているが、私はそれを呼び出すときに、私は別のstrに渡している:それは混乱得ることができる

は、あなたがこのような何かを行う場合です。その機能内で strを変更すると、ローカルの strが変更されます。それらは2つの異なる変数です...

7

技術的にはです。この関数は、現在有効範囲内にあるstr(パラメータ)を記録します。

明らかな理由から、これは良い考えではありません。少なくとも、それは判読不能なコードになります。