valor una tipos retornar que pasar parametros globales funciones funcion ejemplos desde anidadas javascript scope

una - tipos de funciones en javascript



¿Es posible acceder a una variable local de función desde fuera de la función? (7)

Escuché hoy que "es posible acceder a una variable local de una función ya que todo en javascript es global".

Por lo que yo sé, no se puede acceder a una variable local desde fuera del alcance de la variable.

Por ejemplo,

function f() { var myvar = "something"; } myvar = "c"; // i''m not accessing myvar in f();

También escuché que es posible usar for (var i en la ventana) para acceder a myvar. Quiero confirmar que no es posible ya que no soy el autor del idioma.

Actualizado:

Le pregunté un fragmento de código, y esto es lo que he recibido.

var person = { whoIs : function() { var name = "name"; return name; } }; var str = "TEST:/n"; for(var n in person) { str += n; str += " = [" + person[n] + "]/n"; } // perform regular exp. to get the value of name variable. alert(str);

No está accediendo a la variable ......... simplemente está imprimiendo cómo se ve la función ...


A juzgar por el ejemplo que usó ( for(var i in window) ) está contando claramente con que las variables de su función se declaren como globales (sin que var proceda).

Como en ese caso todas las variables definidas están vinculadas al objeto window , sería fácil acceder a ellas simplemente atravesando el objeto ventana. Sin embargo, si usa var para declarar las variables de función locales, estarán disponibles solo para la función en sí (el objeto window no las contendrá).


En tu ejemplo:

function f(){ var myvar = "something"; } myvar = "c"; //nope, they are different.

myvar = "c" se refiere a window.myvar , que no es lo mismo que el myvar dentro de f() . No puede acceder a las variables dentro de la función a menos que se declare fuera de ella.

var myvar; function f(){ myvar = "something"; } myvar = "c"; //now it changes "something" to "c"!


Ese desarrollador estaba equivocado. Esos dos myvar son diferentes. El exterior es equivalente a window.myvar, pero el interior está solo dentro de la f .

Editar: un ejemplo muy simple: http://jsfiddle.net/mRkX3/

Editar 2:

Una cita del estándar ECMAScript:

Si la instrucción de variable se produce dentro de una declaración de función, las variables se definen con el alcance de función local en esa función, como se describe en la sección 10.1.3. De lo contrario, se definen con un alcance global (es decir, se crean como miembros del objeto global, como se describe en la sección 10.1.3) utilizando los atributos de propiedad {DontDelete}. Las variables se crean cuando se ingresa el alcance de la ejecución. Un bloque no define un nuevo alcance de ejecución. Solo Program and FunctionDeclaration produce un nuevo alcance. Las variables se inicializan a indefinido cuando se crean. A una variable con un Inicializador se le asigna el valor de su AssignmentExpression cuando se ejecuta el VariableStatement, no cuando se crea la variable.

Encontrado a través de http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting aunque ese artículo hace referencia a deadlink (enlace en vivo: http://www.ecma-international.org/publications/files/ ECMA-ST / Ecma-262.pdf ).


Sí, tienes razón al respecto. Las variables declaradas dentro del alcance de la función no serán accesibles fuera de la función. Si la función devuelve myvar entonces será posible acceder a su valor pero no a la variable directamente.


Suena como un colapso de comunicación. Apuesto a que estaba tratando de aclarar que puede definir una variable global desde el interior de una función adjuntándola al objeto ventana. Tratar:

function f() { window.myvar = "something"; } myvar = "c"; // overwriting "something"


en su caso myVar está en el alcance de la función y si está definido allí con var , nunca será accesible desde el exterior, pero si no está definido, usted configura myVar en el objeto global (ventana) y podría conducir a muchos problemas.

function(f) { myVar = "hello" }

En este caso puede encontrar myVar , porque no está definido dentro de la función.


function f() { var myvar = "Moon"; } f(); myvar = "Sunlight";