Yanıtlar:
Üretim kodunda (kaçınılması gereken) global değişkenler oluşturmanız gerekiyorsa, bunları her zaman açıkça beyan edin :
window.globalVar = "This is global!";
Global bir değişkeni sadece atlayarak var
(aynı adda yerel bir değişken olmadığı varsayılarak) tanımlamak mümkün olsa da , bunu yapmak örtük bir global üretir , bu da yapılması zor bir şeydir ve katı modda bir hata oluşturur .
Bu değişkeni kullanacağınız tek uygulama bu ise Felix'in yaklaşımı mükemmeldir. Bununla birlikte, bir jQuery eklentisi yazıyorsanız, jQuery nesnesi altında gereken "namespacing" (tırnak işaretleri hakkında ayrıntılar ...) değişkenlerini ve işlevlerini göz önünde bulundurun. Örneğin, şu anda miniMenu olarak adlandırdığım bir jQuery açılır menüsü üzerinde çalışıyorum. Böylece, miniMenu
jQuery altında bir "ad alanı" tanımladım ve ben her şeyi oraya yerleştirin.
Javascript ad alanları hakkında konuşurken tırnak kullanmamın nedeni, normalde gerçekten ad alanı olmamasıdır. Bunun yerine, sadece bir javascript nesnesi kullanın ve tüm işlevleri ve değişkenleri bu nesnenin özellikleri olarak yerleştirin.
Ayrıca, kolaylık sağlamak için eklenti ad alanını genellikle eklentinin i
kullanıcılarından gizlemek için eklentinin içinde yalnızca dahili olarak kullanılması gereken şeyler için bir ad alanı ile alt boşluklara ayırırım.
Bu nasıl çalışır:
// An object to define utility functions and global variables on:
$.miniMenu = new Object();
// An object to define internal stuff for the plugin:
$.miniMenu.i = new Object();
Şimdi yapabilirim $.miniMenu.i.globalVar = 3
ya da bir $.miniMenu.i.parseSomeStuff = function(...) {...}
şeyi küresel olarak kaydetmem gerektiğinde ve hala küresel ad alanından uzak tutuyorum.
delete $.miniMenu
. Tamam mı?
delete $.miniMenu
.
EDIT Soru JavaScript ile ilgili, cevap yanlış jQuery hakkında. Bu, jQuery'nin yaygın olduğu zamanlardan beri eski bir cevaptır.
Bunun yerine, JavaScript'teki kapsamları ve kapanışları anlamayı öneririm
Eski, kötü cevap: jQuery ile, bildirim nerede olursa olsun, bunu yapabilirsiniz:
$my_global_var = 'my value';
Ve her yerde mevcut olacak. Görüntüler farklı yerlere yayıldığında hızlı resim galerileri yapmak için kullanıyorum, şöyle:
$gallery = $('img');
$current = 0;
$gallery.each(function(i,v){
// preload images
(new Image()).src = v;
});
$('div').eq(0).append('<a style="display:inline-block" class="prev">prev</a> <div id="gallery"></div> <a style="display:inline-block" class="next">next</a>');
$('.next').click(function(){
$current = ( $current == $gallery.length - 1 ) ? 0 : $current + 1;
$('#gallery').hide().html($gallery[$current]).fadeIn();
});
$('.prev').click(function(){
$current = ( $current == 0 ) ? $gallery.length - 1 : $current - 1;
$('#gallery').hide().html($gallery[$current]).fadeIn();
});
İpucu : Bu kodun tamamını bu sayfadaki konsolda çalıştırın ;-)
$current = 0;
fonksiyonun başında tanımlamazsanız , bir sonraki fonksiyon çalışmaz.
Aşağıda, işlevlerinizin geri kalanının erişebileceği genel bir değişkene temel bir örnek verilmiştir. İşte size canlı bir örnek: http://jsfiddle.net/fxCE9/
var myVariable = 'Hello';
alert('value: ' + myVariable);
myFunction1();
alert('value: ' + myVariable);
myFunction2();
alert('value: ' + myVariable);
function myFunction1() {
myVariable = 'Hello 1';
}
function myFunction2() {
myVariable = 'Hello 2';
}
Bunu bir jquery ready () işlevi içinde yapıyorsanız, değişkeninizin diğer işlevlerinizle birlikte ready () işlevi içinde olduğundan emin olun.
Değişkeni işlevlerin dışında bildirme
function dosomething(){
var i = 0; // can only be used inside function
}
var i = '';
function dosomething(){
i = 0; // can be used inside and outside the function
}
En iyi yol kullanmaktır closures
, çünkü window
nesne çok, çok karmaşıklaşır özelliklere sahiptir.
Html
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="init.js"></script>
<script type="text/javascript">
MYLIBRARY.init(["firstValue", 2, "thirdValue"]);
</script>
<script src="script.js"></script>
</head>
<body>
<h1>Hello !</h1>
</body>
</html>
init.js ( Bu yanıta göre )
var MYLIBRARY = MYLIBRARY || (function(){
var _args = {}; // private
return {
init : function(Args) {
_args = Args;
// some other initialising
},
helloWorld : function(i) {
return _args[i];
}
};
}());
script.js
// Here you can use the values defined in the html as if it were a global variable
var a = "Hello World " + MYLIBRARY.helloWorld(2);
alert(a);
İşte plnkr . Umarım yardımcı olur!
window
yalnızca tarayıcılarda kullanılabilir. Tüm ortamlarda çalışmasını sağlamak için yanıtınızı düzenleyebilir misiniz? Bkz . Global nesneyi JavaScript'e nasıl alabilirim?