下記の2つの方法に違いはありますか?なぜ私はどちらを使うべきですか?letでjavascriptを再割り当て
while (true) {
let test = getValue();
....
}
そして
let test;
while (true) {
test = getValue();
....
}
下記の2つの方法に違いはありますか?なぜ私はどちらを使うべきですか?letでjavascriptを再割り当て
while (true) {
let test = getValue();
....
}
そして
let test;
while (true) {
test = getValue();
....
}
let
はそれだけ{...}
ブロック内に存在することを意味ブロックスコープあります。
test
のみをブロック内(外部ではない)で使用する場合は、このフォームを使用してください(同じブロック内の値を変更しない場合、let
は不要です)。
while (true) {
const test = getValue();
....
}
あなたはwhile
ループの外側からtest
にアクセスする必要がある場合は、このフォームを使用する必要があります。
let test;
while (true) {
test = getValue();
....
}
うんあなたは、whileループの外で変数のテストにアクセスすることはできません最初のバージョンの違いがあります。 2番目のバージョンでは、ループ外のテスト変数にアクセスできます。
優れている、変数のスコープは、しばらく制限されています一方の変数はループ中に外部からアクセスすることができます。
ええ、両方の違いがあります。
あなたはループの外で変数を宣言した場合、ループ外に他のコードでアクセスできるようにループ&でを更新することができます。
ループ内で宣言した場合、は、ループからアクセス可能な&のみ更新できます。
はい、違いがあります:
test
変数を持っています。 2番目のケースでは、すべてのループ反復で変数が1つだけtest
共有されます。ループ内に関数を作成してパフォーマンス面を持つことができれば、重要な効果があります(もちろん、すべてのパフォーマンス面のように、問題が発生した場合にのみ問題になります)。test
変数はループ内でのみアクセス可能です。 2番目の変数では、ループの外側で変数test
がアクセス可能です。なぜどちらを使用する必要がありますか?
状況に適したものです。ループごとに個別のtest
変数が必要な場合や、ループに対してプライベートにする場合は、最初の変数を使用します。そうでない場合は、2番目の文字を使用します。変数のみ中括弧のその周囲のペア内存在することを意味 -
最初のアプローチでは、変数「test」は、囲み関数が返ってきたときにガベージコレクションのためにスケジュールされます(閉じたケースは考慮しないでください)。しかし、第二のアプローチはどうですか?いくつのメモリ参照が作成され、消去されるでしょうか?作成されたすべての参照は、各反復後にガベージコレクションのスケジュールが設定されますか? –
@RajaprabhuAravindasamy:上記のように、最初のケースでは、ループの繰り返しごとに別々の 'test'変数があります。ループの反復処理が完了したときにGCで利用できるようになりました。 –
let
はブロックスコープを有しています。したがって、ループの後にlet
の値を出力しようとするこの状況では、undefined
が返されます。この状況で
while (true) {
let test = getValue();
console.log(test); // => some value...
....
}
console.log(test); // => undefined
それはwhileループの外に保存されますので、test
はすでに、whileループ(中括弧)の前に定義されます:あなたは内部let
を使用している場合でも
let test;
while (true) {
test = getValue();
console.log(test); // => some value...
....
}
console.log(test); // => still some value...
注意whileループと同様に、それは同じように扱います:
let test = 5;
while (true) {
let test = 4;
console.log(test); // => 4
....
}
console.log(test); // => 4, not 5
あなた自身の特別なブロックスコープ変数を定義しようとしないでくださいメイン1
の独立した私は、そうでなければ、私は今までのブロックの中からアクセスするつもり無限ループ
'const test'は各繰り返しの後に設定されていないので、ループ内でconstを使うことができますか? – unska
はい新しい 'test'変数が各反復の間に作成されます。各反復中にオーバーライドする必要がないかぎり、ループ内で使用できます。 – klugjo
恐ろしい、それを知らなかった。ありがとうございました! – unska