Foros del Web » Programando para Internet » Javascript »

Problema con bucle for

Estas en el tema de Problema con bucle for en el foro de Javascript en Foros del Web. Hola a todos, tengo un problema con un bucle for, y es que haciendo uso de la API de Google para crear menús contextuales siempre ...
  #1 (permalink)  
Antiguo 16/07/2011, 22:39
zant95
Invitado
 
Mensajes: n/a
Puntos:
Problema con bucle for

Hola a todos, tengo un problema con un bucle for, y es que haciendo uso de la API de Google para crear menús contextuales siempre obtengo el último valor de "x" en el bucle.

Código Javascript:
Ver original
  1. for (var x = 0; x < listImagesAngry.length; x++) {
  2.      var menuId = listImagesAngry[x];
  3.      menuId = chrome.contextMenus.create({'title': '!'+listImagesAngry[x]+'!', 'parentId': imagesParentAngry, 'contexts': ['editable'], 'onclick': function(){sendCode(listImagesAngry[x])}});
  4. }

Es en la función sendCode cuando obtengo el último valor de "x", lo demás funciona bien.

Saludos.
  #2 (permalink)  
Antiguo 17/07/2011, 01:08
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Problema con bucle for

buenas,
el código en realidad funciona bien. el problema más bien se debe a la falta de entendimiento en como funciona algunas características del lenguaje. en este caso particular del scope de las variables y el runtime de javascirpt. un detalle que de vez en cuando se ignora es que los bucles en javascript no generan un nuevo scope. de forma resumida, el problema consiste en que javascript lee las variables en último momento -por decirlo de una forma. lo que significa que si creas dinámicamente funciones que accesan a variables externas, dichas funciones no adquieren el valor de las variables al momento de definirse, sino al momento de invocarse. algunos artículos que encontre que pudieran ayudarte...
http://haveacafe.wordpress.com/2008/...rnal-function/
http://robertnyman.com/2008/10/09/ex...-and-closures/

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 17/07/2011, 06:31
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con bucle for

Muchas gracias, la solución que proponen en el primer enlace no me funcionó, pero la del segundo si.


Código Javascript:
Ver original
  1. for (var x = 0; x < listImagesAngry.length; x++) {
  2.      var menuId = listImagesAngry[x];
  3.      menuId = chrome.contextMenus.create({'title': '!'+menuId+'!', 'parentId': imagesParentAngry, 'contexts': ['editable'], 'onclick': function (num) {return function () {sendCode(listImagesAngry[num]);};}(x)});
  4. }

Etiquetas: bucle
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:14.