valor - Definir variable global en una función de JavaScript.
tipos de funciones en javascript (11)
ACTUALIZACIÓN1: Si lees los comentarios, hay una buena discusión en torno a esta convención de nombres en particular.
ACTUALIZACIÓN2: Parece que desde que se publicó mi respuesta, la convención de nomenclatura se ha vuelto más formal. Las personas que enseñan, escriben libros, etc. hablan sobre la declaración de var
y la declaración de function
.
ACTUALIZACIÓN 3: Aquí está la publicación de wikipedia adicional que admite mi punto: http://en.wikipedia.org/wiki/Declaration_(computer_programming)#Declarations_and_Definitions #Declarations_and_Definitions
... y para responder a la pregunta principal. DECLARAR la variable antes de su función. Esto funcionará y cumplirá con la buena práctica de declarar sus variables en la parte superior del alcance :)
¿Es posible definir una variable global en una función de JavaScript?
Quiero usar la variable trailimage
(declarada en la función makeObj
) en otras funciones.
<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>
Aquí hay otro método fácil para hacer que la variable esté disponible en otras funciones sin tener que usar variables globales:
function makeObj() {
// var trailimage = ''test'';
makeObj.trailimage = ''test'';
}
function someOtherFunction() {
document.write(makeObj.trailimage);
}
makeObj();
someOtherFunction();
Aquí hay un código de ejemplo que puede ser útil.
var Human = function(){
name = "Shohanur Rahaman"; // global variable
this.name = "Tuly"; // constructor variable
var age = 21;
};
var shohan = new Human();
document.write(shohan.name+"<br>");
document.write(name);
document.write(age); // undefined cause its local variable
Aquí encontré una buena respuesta How-can-one-declare-a-global-variable-in-JavaScript
Ejemplo clásico:
window.foo = ''bar'';
Ejemplo moderno y seguro siguiendo las mejores prácticas utilizando un IIFE :
;(function (root) {
''use strict''
root.foo = ''bar'';
)(this));
Hoy en día, también existe la opción de utilizar la API de almacenamiento web.
localStorage.foo = 42;
o
sessionStorage.bar = 21;
En términos de rendimiento, no estoy seguro de que sea notablemente más lento que almacenar valores en variables.
Soporte generalizado del navegador como se indica en ¿Puedo usar ...
Es muy simple definir la variable trailimage fuera de la función y establecer su valor en la función makeObj. Ahora puedes acceder a su valor desde cualquier lugar.
var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
var trailimage;
function makeObj(address) {
trailimage = [address, 50, 50];
....
}
No, no puedes. Solo declara la variable fuera de la función. No tiene que declararlo al mismo tiempo que asigna el valor:
var trailimage;
function makeObj(address) {
trailimage = [address, 50, 50];
Sí, como han dicho los demás, puede usar var
en el ámbito global (fuera de todas las funciones) para declarar una variable global:
<script>
var yourGlobalVariable;
function foo() {
// ...
}
</script>
Alternativamente, puede asignar a una propiedad en la window
:
<script>
function foo() {
window.yourGlobalVariable = ...;
}
</script>
... porque en los navegadores, todas las variables globales variables globales declaradas con var
son propiedades del objeto de window
. (En la última especificación, ECMAScript 2015, las nuevas declaraciones let
, const
y class
en el ámbito global crean globales que no son propiedades del objeto global; un nuevo concepto en ES2015).
(También existe el horror de los globales implícitos , pero no lo hagas a propósito y haz lo mejor para evitar hacerlo por accidente, tal vez utilizando el "use strict"
ES5).
Dicho todo esto: evitaría las variables globales si es posible (y casi seguro que puedes). Como mencioné, terminan siendo propiedades de la window
, y la window
ya está lo suficientemente llena como para que todos los elementos con un id
(y muchos con solo un name
) se descarguen en él (e independientemente de la próxima especificación, IE descargue casi cualquier cosa) con un name
allí).
En su lugar, envuelva su código en una función de alcance y use variables locales para esa función de alcance, y haga que sus otras funciones se cierren dentro de él:
<script>
(function() { // Begin scoping function
var yourGlobalVariable; // Global to your code, invisible outside the scoping function
function foo() {
// ...
}
})(); // End scoping function
</script>
Si está realizando una función de inicio, puede definir funciones y variables globales de la siguiente manera:
function(globalScope)
{
//define something
globalScope.something() {
alert("It works");
};
}(window)
Debido a que la función se invoca globalmente con este argumento, este es el alcance global aquí. Entonces, el algo debería ser una cosa global.
Simplemente declare fuera de las funciones y asigne valores dentro de las funciones. Algo como:
<script type="text/javascript">
var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
var trailimage = null ; // GLOBAL VARIABLE
function makeObj(address) {
trailimage = [address, 50, 50]; //ASSIGN VALUE
O simplemente eliminar "var" de su nombre de variable dentro de la función también lo hace global, pero es mejor declararlo afuera una vez para un código más limpio. Esto también funcionará:
var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
function makeObj(address) {
trailimage = [address, 50, 50]; //GLOBAL VARIABLE , ASSIGN VALUE
Espero que este ejemplo explique más: http://jsfiddle.net/qCrGE/
var globalOne = 3;
testOne();
function testOne()
{
globalOne += 2;
alert("globalOne is : " + globalOne );
globalOne += 1;
}
alert("outside globalOne is : " + globalOne);
testTwo();
function testTwo()
{
globalTwo = 20;
alert("globalTwo is " + globalTwo);
globalTwo += 5;
}
alert("outside globalTwo is :" + globalTwo);
Solo declara
var trialImage;
fuera de. Entonces
function makeObj(address) {
trialImage = [address, 50, 50];
..
..
}
Espero que esto ayude.
var Global = ''Global'';
function LocalToGlobalVariable() {
//This creates a local variable.
var Local = ''5'';
//Doing this makes the variable available for one session
//(a page refresh - Its the session not local)
sessionStorage.LocalToGlobalVar = Local;
// It can be named anything as long as the sessionStorage references the local variable.
// Otherwise it won''t work
//This refreshes the page to make the variable take effect instead of the last variable set.
location.reload(false);
};
//This calls the variable outside of the function for whatever use you want.
sessionStorage.LocalToGlobalVar;
Me doy cuenta de que probablemente haya muchos errores de sintaxis en esto, pero es la idea general ... Muchas gracias LayZee por señalarlo ... Puede encontrar un almacenamiento local y de sesión en http://www.w3schools.com/html/html5_webstorage.asp . He necesitado lo mismo para mi código y esta fue una muy buena idea.