Pertanyaan Redeclaring variabel javascript


Di ini ada tutorial tertulis:

If you redeclare a JavaScript variable, it will not lose its value.

Mengapa saya harus mengulang variabel? Apakah praktis dalam beberapa situasi?

Terima kasih


35
2017-07-31 09:05


asal


Jawaban:


Ini tidak lebih dari pengingat bahwa jika Anda melakukan ini:

var x=5;
var x;
alert(x);

Hasilnya akan menjadi 5.

Jika Anda mendeklarasikan ulang variabel dalam beberapa bahasa lain misalnya - hasil akan tidak terdefinisi, atau NaN, tetapi tidak dalam javascript.


43
2017-07-31 09:08



Contoh redeclaring variabel dapat ditemukan di Google Analytics. Ketika kode pelacakan JavaScript diprakarsai oleh skrip Google Analytics, itu menyatakan atau mengundurkan diri _gaq lewat sini:

var _gaq = _gaq || [];

Dengan kata lain, jika _gaq sudah didefinisikan, _gaq adalah "redeclared" sebagai dirinya sendiri. Jika tidak didefinisikan, itu akan dideklarasikan untuk pertama kalinya sebagai larik kosong.

Ini memungkinkan kode pelacakan Google Analytics untuk mendukung skrip lain yang mungkin perlu menggunakan variabel sebelum kode Google Analytics dimulai. Seperti yang ditunjukkan @xralf, JavaScript memungkinkan untuk ini.

Redeclaring variabel berguna dalam situasi di mana tidak dapat diketahui jika variabel telah ditentukan.

Dengan mengulang variabel secara kondisional, seperti yang dilakukan oleh kode pelacakan Google Analytics, ini memungkinkan variabel dapat dengan aman berasal dari lebih dari satu tempat.

Dalam contoh ini bisa aman untuk kode lain menggunakan _gaq variabel untuk juga memeriksa yang telah ditentukan _gaq variabel. Jika ada, ia tahu itu bisa menggunakannya. Jika tidak ada, ia tahu bahwa itu harus mendefinisikannya sebelum mencoba menggunakannya.


31
2017-10-15 05:46



Mengapa saya harus mengulang variabel?

Anda tidak seharusnya. Itu membuat kode membingungkan.

Apakah praktis dalam beberapa situasi?

Tidak.


19
2017-07-31 09:09



Dalam javascript tidak ada lingkup blok sehingga disarankan untuk mengulang variabel untuk tujuan klarifikasi; ini membuat kode yang lebih baik.

Sebagai contoh:

for (var x=0; x< 100; x++) { }

alert(x); //In most languages, x would be out of scope here.
          //In javascript, x is still in scope.


//redeclaring a variable helps with clarification: 
var x = "hello";
alert(x);

7
2017-07-27 11:25



Itu tidak kehilangan nilainya karena Mengangkat 

var x = 5;
var x;

// this is same as

var x; // undefined;
x = 5;

Jadi ketika Anda mengatakan "Jika Anda mengulang variabel JavaScript, itu tidak akan kehilangan nilainya."

Sesuai mengangkat, deklarasi (s), semua dari mereka, pindah ke atas. Lalu variabel ditugaskan.

var x = 25;
var x; // redeclare first time
var x; // redeclare second time

// is same as 

var x; // undefined
var x; // Not sure if this happens, but doesn't make a difference, it's still undefined
x = 25;

Untuk kepraktisan, itu kadang terjadi. Lihatlah jawaban @steveoliver.


3
2018-03-15 10:40



Secara umum, itu bisa dianggap gaya buruk untuk dimiliki var penugasan setelah pernyataan lain karena masalah pengangkatan (Lihat disini). Menggunakan "Single var pattern" (Lihat disini), redeclarations hanya bisa terjadi seperti dalam contoh Google Analtyics milik Steve Oliver. Saya akan refactor contoh di atas untuk:

var x, max = 100; // no further var declarations afterwards!

for (x = 0; x < max; x++) { }

alert(x);

// redeclaration 'var x = "hello"' doesn't make any sense here
// and would be complained about by JSLint/-Hint 
x = 'hello';
alert(x);

Akan tetapi, redeclaration dapat digunakan ketika menggunakan nilai default untuk parameter opsional (seperti yang menjadi contoh Google Analytics, saya berasumsi):

function abc(param1) {
  var param1 = param1 || 'default value';
}

0
2017-10-15 08:39