Saltar al contenido

Punteros en JavaScript?

Hola, descubrimos la solución a lo que andabas buscando, has scroll y la hallarás aquí.

Solución:

Dado que JavaScript no admite el paso de parámetros por referencia, deberá convertir la variable en un objeto en su lugar:

var x = Value: 0;

function a(obj)

    obj.Value++;


a(x);
document.write(x.Value); //Here i want to have 1 instead of 0

En este caso, x es una referencia a un objeto. Cuando x se pasa a la función aesa referencia se copia en obj. De este modo, obj y x referirse a lo mismo en la memoria. Cambiando el Value propiedad de obj afecta el Value propiedad de x.

Javascript siempre pasará los parámetros de la función por valor. Eso es simplemente una especificación del lenguaje. Tú pudo crear x en un ámbito local para ambas funciones, y no pasar la variable en absoluto.

Esta pregunta puede ayudar: ¿Cómo pasar la variable por referencia en javascript? Leer datos de la función ActiveX que devuelve más de un valor

Para resumir, los tipos primitivos de Javascript siempre se pasan por valor, mientras que los valores dentro de los objetos se pasan por referencia (gracias a los comentaristas por señalar mi descuido). Entonces, para evitar esto, debe poner su número entero dentro de un objeto:

var myobj = x:0;

function a(obj)

    obj.x++;


a(myobj);
alert(myobj.x); // returns 1

  

He encontrado una forma ligeramente diferente de implementar punteros que quizás sea más general y más fácil de entender desde una perspectiva C (y por lo tanto se ajusta más al formato del ejemplo de los usuarios).

En JavaScript, como en C, array las variables son en realidad solo punteros a la arraypor lo que puede utilizar un array como exactamente lo mismo que declarar un puntero. De esta manera, todos los punteros en su código se pueden usar de la misma manera, a pesar del nombre que le dio a la variable en el objeto original.

También permite usar dos notaciones diferentes que se refieren a la dirección del puntero y lo que está en la dirección del puntero.

Aquí hay un ejemplo (uso el guión bajo para indicar un puntero):

var _x = [ 10 ];

function foo(_a)
    _a[0] += 10;


foo(_x);

console.log(_x[0]);

rendimientos

output: 20

Puntuaciones y reseñas

Al final de la web puedes encontrar las ilustraciones de otros sys admins, tú aún tienes la habilidad mostrar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *