var str = 'internet';
performAction(function(str) {
console.log(str);
});
プライベート変数str
があり、同じ名前のパラメータを持つコールバック関数を持つことに問題がありますか?JavaScript:他の変数と同じ名前のコールバック関数のパラメータ?
ありがとうございます!
var str = 'internet';
performAction(function(str) {
console.log(str);
});
プライベート変数str
があり、同じ名前のパラメータを持つコールバック関数を持つことに問題がありますか?JavaScript:他の変数と同じ名前のコールバック関数のパラメータ?
ありがとうございます!
これは単なる標準的なスコープの状況です。これは、別の関数にパラメータとして渡される匿名関数式であるという事実は関係ありません。 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つの異なる変数です...
技術的にはです。この関数は、現在有効範囲内にあるstr
(パラメータ)を記録します。
明らかな理由から、これは良い考えではありません。少なくとも、それは判読不能なコードになります。
いいえ - 実際には同じ変数ではないことを忘れないでください。 –
ありがとうございました! –