Respuestas:
Si tiene que generar variables globales en el código de producción (que debe evitarse), declare siempre explícitamente :
window.globalVar = "This is global!";
Si bien es posible definir una variable global simplemente omitiendo var
(suponiendo que no haya una variable local con el mismo nombre), hacerlo genera una global implícita , lo cual es algo malo y generaría un error en modo estricto .
Si esta es la única aplicación en la que va a utilizar esta variable, el enfoque de Felix es excelente. Sin embargo, si está escribiendo un complemento jQuery, considere las variables y funciones de "espacio de nombres" (detalles sobre las comillas más adelante ...) necesarias bajo el objeto jQuery. Por ejemplo, actualmente estoy trabajando en un menú emergente jQuery que he llamado miniMenu. Por lo tanto, he definido un "espacio de nombres" miniMenu
en jQuery, y coloco todo allí.
La razón por la que uso comillas cuando hablo de los espacios de nombres de JavaScript es que en realidad no son espacios de nombres en el sentido normal. En cambio, solo uso un objeto javascript y coloco todas mis funciones y variables como propiedades de este objeto.
Además, por conveniencia, generalmente subespacio el espacio de nombres del complemento con un i
espacio de nombres para cosas que solo deben usarse internamente dentro del complemento, para ocultarlo de los usuarios del complemento.
Así es como funciona:
// 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();
Ahora solo puedo hacer $.miniMenu.i.globalVar = 3
o $.miniMenu.i.parseSomeStuff = function(...) {...}
cada vez que necesito guardar algo globalmente, y aún lo mantengo fuera del espacio de nombres global.
delete $.miniMenu
. ¿Está bien?
delete $.miniMenu
.
EDITAR La pregunta es sobre JavaScript, la respuesta es sobre jQuery, que está mal. Esta es una vieja respuesta, desde tiempos en que jQuery estaba muy extendido.
En cambio, recomiendo comprender los ámbitos y cierres en JavaScript
Vieja, mala respuesta: con jQuery puedes hacer esto, sin importar dónde esté la declaración:
$my_global_var = 'my value';
Y estará disponible en todas partes. Lo uso para hacer galerías de imágenes rápidas, cuando las imágenes se difunden en diferentes lugares, así:
$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();
});
Consejo : ejecute todo este código en la consola en esta página ;-)
$current = 0;
al principio de la función, la última no funcionará.
Aquí hay un ejemplo básico de una variable global a la que puede acceder el resto de sus funciones. Aquí hay un ejemplo en vivo para usted: 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';
}
Si está haciendo esto dentro de una función jquery ready (), asegúrese de que su variable esté dentro de la función ready () junto con sus otras funciones.
Declarar la variable fuera de las funciones.
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
}
La mejor manera es usarlo closures
, porque el window
objeto se vuelve muy, muy desordenado de propiedades.
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 (Basado en esta respuesta )
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);
Aquí está el plnkr . Espero que ayude!
window
está disponible solo en navegadores. ¿Podría editar su respuesta para que funcione en todos los entornos? Consulte ¿Cómo obtener el objeto global en JavaScript?