Lebih
Mendefinisikan variabel global dalam fungsi JavaScript
Adalah mungkin untuk menentukan variabel global dalam fungsi JavaScript?
Saya ingin menggunakan trailimage
variabel (dinyatakan dalam makeObj
fungsi) dalam fungsi-fungsi lainnya.
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<script type="text/javascript">
var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
function makeObj(address) {
**var trailimage = [address, 50, 50];**
document.write('<img id="trailimageid" src="' + trailimage[0] + '" border="0" style=" position: absolute; visibility:visible; left: 0px; top: 0px; width: ' + trailimage[1] + 'px; height: ' + trailimage[2] + 'px">');
obj_selected = 1;
}
function truebody() {
return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
}
function hidetrail() {
var x = document.getElementById("trailimageid").style;
x.visibility = "hidden";
document.onmousemove = "";
}
function followmouse(e) {
var xcoord = offsetfrommouse[0];
var ycoord = offsetfrommouse[1];
var x = document.getElementById("trailimageid").style;
if (typeof e != "undefined") {
xcoord += e.pageX;
ycoord += e.pageY;
}
else if (typeof window.event != "undefined") {
xcoord += truebody().scrollLeft + event.clientX;
ycoord += truebody().scrollTop + event.clientY;
}
var docwidth = 1395;
var docheight = 676;
if (xcoord + trailimage[1] + 3 > docwidth || ycoord + trailimage[2] > docheight) {
x.display = "none";
alert("inja");
}
else
x.display = "";
x.left = xcoord + "px";
x.top = ycoord + "px";
}
if (obj_selected = 1) {
alert("obj_selected = true");
document.onmousemove = followmouse;
if (displayduration > 0)
setTimeout("hidetrail()", displayduration * 1000);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<img alt="" id="house" src="Pictures/sides/right.gif" style="z-index: 1; left: 372px;
top: 219px; position: absolute; height: 138px; width: 120px" onclick="javascript:makeObj('Pictures/sides/sides-not-clicked.gif');" />
</form>
</body>
</html>
478
12
Ya, sebagai orang lain telah mengatakan, anda dapat menggunakan
var
di lingkup global (di luar semua fungsi) untuk mendeklarasikan variabel global:Bergantian, anda dapat menetapkan properti di
jendela
:...karena di browser, semua variabel global global variabel yang dideklarasikan dengan
var
adalah sifat darijendela
objek. (Terbaru spesifikasi, ECMAScript 2015, barumembiarkan
,t
, dankelas
pernyataan di lingkup global membuat globals yang tidak't sifat-sifat objek global; konsep baru dalam ES2015.)(Ada's juga horor implisit globals, tapi don't melakukannya dengan sengaja dan melakukan yang terbaik untuk menghindari melakukan hal itu dengan tidak sengaja, mungkin dengan menggunakan ES5's
"penggunaan ketat"
.)Semua yang mengatakan: saya'd hindari variabel global jika anda bisa (dan anda hampir pasti dapat). Seperti yang saya sebutkan, mereka akhirnya menjadi sifat dari
jendela
, danjendela
sudah banyak cukup ramai ada apa dengan semua elemen dengan sebuahid
(dan banyak hanya dengannama
) yang dibuang di dalamnya (dan terlepas bahwa spesifikasi mendatang, YAITU kesedihan hanya tentang apa-apa dengannama
di sana).Sebaliknya, bungkus kode dalam ruang lingkup fungsi dan penggunaan variabel lokal untuk ruang lingkup fungsi, dan membuat fungsi-fungsi lain dalam penutupan ini:
UPDATE1: Jika anda membaca komentar-komentar yang ada's nice diskusi ini konvensi penamaan tertentu.
UPDATE2: tampaknya bahwa sejak saya menjawab telah diposting konvensi penamaan yang sudah lebih formal. Orang-orang yang mengajar, menulis buku, dll. berbicara tentang
var
deklarasi, danfungsi
deklarasi.UPDATE3: di Sini adalah tambahan wikipedia posting yang mendukung maksud saya: http://en.wikipedia.org/wiki/Declaration_(computer_programming)#Declarations_and_Definitions
...dan untuk menjawab pertanyaan utama. MENDEKLARASIKAN variabel sebelum anda fungsi. Ini akan bekerja dan akan mematuhi praktek yang baik mendeklarasikan variabel anda di bagian atas ruang lingkup :)
Hanya menyatakan
luar. Kemudian
Semoga ini bisa membantu.
Hanya menyatakan hal itu di luar fungsi, dan menetapkan nilai-nilai di dalam fungsi. Sesuatu seperti:
Atau hanya mengeluarkan "var" dari nama variabel di dalam fungsi juga membuatnya global, tetapi lebih baik untuk menyatakan hal itu di luar sekali untuk kode bersih. Ini juga akan bekerja:
Saya berharap contoh ini menjelaskan lebih lanjut: http://jsfiddle.net/qCrGE/
Tidak, anda dapat't. Hanya mendeklarasikan variabel di luar fungsi. Anda don't harus menyatakan hal itu pada waktu yang sama seperti anda menetapkan nilai:
Hal ini sangat sederhana untuk memaksimalkan trailimage variabel di luar fungsi dan set nilainya di makeObj fungsi. Sekarang anda dapat mengakses nilai dari mana saja.
Saya menyadari mungkin ada banyak kesalahan sintaks dalam hal ini tetapi ide umum... Terima kasih banyak LayZee untuk menunjukkan ini... Anda dapat menemukan apa yang lokal dan sesi Penyimpanan di http://www.w3schools.com/html/html5_webstorage.asp. Saya membutuhkan hal yang sama untuk kode saya dan ini adalah ide yang sangat baik.
Contoh klasik:
Modern, aman contoh berikut praktek terbaik dengan menggunakan HIDUP:
Saat ini, ada's juga pilihan untuk menggunakan WebStorage API
atau
Performancewise, I'm tidak yakin apakah itu terasa lebih lambat daripada menyimpan nilai ke dalam variabel.
Luas browser mendukung seperti yang disebutkan pada Bisa saya gunakan...
Jadi, anda ingin variabel di dalam fungsi yang tersedia di luar fungsi? Mengapa tidak mengembalikan hasil dari variabel di dalam fungsi?
var x = fungsi returnX { var x = 0; return x; }
adalah ide...Aku ingin't diuji ini, tapi jika kode anda bekerja sebelum itu perubahan kecil, maka harus bekerja.
Berikut adalah contoh kode yang mungkin dapat helful.
Di sini saya menemukan jawaban yang bagus Cara-dapat-satu-menyatakan-a-global-variabel dalam JavaScript
Berikut ini adalah metode yang mudah untuk membuat variabel yang tersedia dalam fungsi-fungsi lain tanpa harus menggunakan variabel global:
jika anda membuat startup fungsi, anda dapat menentukan fungsi-fungsi global dan variabel dalam cara seperti:
Karena fungsi ini dipanggil secara global dengan argumen ini, ini adalah lingkup global di sini. Jadi, sesuatu yang seharusnya menjadi hal yang global.