Platzi
Platzi

¡Invierte en ti y celebremos! Adquiere un plan Expert o Expert+ a precio especial.

Antes: $349
$259
Currency
Antes: $349
Ahorras: $90
COMIENZA AHORA
Termina en: 13D : 7H : 47M : 59S

Debes iniciar sesión

Para ver esta clase crea una cuenta sin costo o inicia sesión

Local Scope3/12

Lexical Scope / Ámbito Léxico: El intérprete de JavaScript funciona desde el ámbito de ejecución actual y funciona hasta encontrar la variable en cuestión. Si la variable no se encuentra en ningún ámbito, se genera una excepción.

Este tipo de búsqueda se llama ámbito léxico. El alcance de una variable se define por su ubicación dentro del código fuente, y las funciones anidadas tienen acceso a las variables declaradas en su alcance externo. No importa de dónde se llame una función, o incluso cómo se llama, su alcance léxico depende solo de dónde se declaró la función.

El scope se puede definir como el alcance que puede tener una variable en tu codigo.

El Local Scope: se refiere a la variable o funcion que esta dentro de un bloque o funcion especifica. Solo se pueden acceder a ellas (ejecutar o llamar) dentro del entrono en donde conviven.

El ambito lexico: se refiere a que una funcion puede acceder a una funcion o variable fuera de ella.Cada nivel interno puede acceder a sus niveles externos hasta poder alcanzarlas.

La forma en la que yo entiendo el lexical scope es de adentro hacia afuera. Es decir que JS siempre busca las variables en el bloque más interno desde donde haya sido llamada. Por ejemplo:

const scope = "I'm global";
const func1 = () => {
  const scope = "I'm local 1";
  const func2 = () => {
    const scope = "I'm local 2";
    const func3 = () => {
      const scope = "I'm local 3";
      console.log(scope);
    }
    func3();
  }
  func2();
}
func1();

En el código anterior la salida será

I'm local 3

Debido a que el console.log(scope) busca la variable dentro de func3() (desde donde fué llamado) y al encontrar la variable scope = “I’m local 3” entonces la imprime. Pero si eliminamos esa linea y dejamos esto:

const scope = "I'm global";
const func1 = () => {
  const scope = "I'm local 1";
  const func2 = () => {
    const scope = "I'm local 2";
    const func3 = () => {
      console.log(scope);
    }
    func3();
  }
  func2();
}
func1();

La salida es:

I'm local 2

Si observamos dentro de fun3() ya no existe ninguna definición de la variable scope, por lo que JS buscará por fuera de este bloque pasando a al bloque func2(), en donde encuentra const scope = “I’m local 2”. Y asi sucesivamente podriamos ir eliminando definiciones de scope de adentro hacia afuera:

const scope = "I'm global";
const func1 = () => {
  const scope = "I'm local 1";
  const func2 = () => {
    const func3 = () => {
      console.log(scope);
    }
    func3();
  }
  func2();
}
func1();

Cuya salida es:

I'm local 1

Finalmente tenemos:

const scope = "I'm global";
const func1 = () => {
  const func2 = () => {
    const func3 = () => {
      console.log(scope);
    }
    func3();
  }
  func2();
}
func1();

Cuya salida es:

I'm global

Pero este coportamiento siempre es exclusivamente de adentro hacia afuera, y por tanto si intentamos algo como esto:

const func1 = () => {
  const func2 = () => {
    const func3 = () => {
      const scope = "I'm local 3";
    }
    console.log(scope);
    func3();
  }
  func2();
}
func1();

JS devuelve un ReferenceError ya que console.log(scope) fue llamado desde func2(); por fuera de func3() en donde se encuentra definido const scope = “I’m local 3”. Por lo que JS no puede encontrarlo y devuelve el error.

Lo que entendí del ámbito léxico es que a pesar que tengas una variable global declarada e inicializada, puedes tener la misma variable declarada e inicializada con otro valor dentro de una función y esta última no reasignará su valor a la variable global.

El scope local nos permite acceder una variable en un bloque de código o estructura, como las funciones. Por lo tanto el scope global no puede acceder a las variables dentro de un bloque de código.

Si se anida una función dentro de otra, las variables de la primera función van a poder ser accedidas dentro de la segunda.

Ámbito léxico significa que una función busca variables en el contexto donde se definió, y no en el ámbito que la rodea.

Excelente el concepto de ambito léxico

const helloWorld = () => {
    const hello = 'Hello World';
    console.log(hello);
}

helloWorld();
console.log(hello);

var scope = 'i am globa';

const functionScope = () => {
    // a esto se le llama el ambito léxico. Esta variable scope es local y es diferente a la variable global scope, asi tengan el mismo nombre
    var scope = 'i am just a local'; 
    const func = () => {
        return scope
    }
    console.log(func());
}
    
functionScope();
console.log(scope);

AL ser una variable global y ser declarada con var, cuando se utiliza dentro de una funcion, puede reasignarse su valor.

Después cuando se declara una funcion dentro de la mima función y se regresa el valor de la variable local de la primera función, la variable local se hace global dentro de ese contexto. Por lo que el resultado es I am local.

No se si me redacción fue lo bastante buena para darme a entender jaja

//ejemplo de ambito lexico
let hello = "hello"
{
  let world = "world"
  {
    let js = "javascript"
    {
      const funcion = () => {
        return `${hello} ${world} ${js}`
      }
      //la funcion puede alcanzar las variables definidas en bloques superiores
      console.log(funcion())
    }
  }
}

Scope Local: Nos permite acceder a una variable en un bloque de código o una función, sólo tenemos acceso a ella en esa estructura.

Variables locales de JavaScript
Las variables declaradas dentro de una función de JavaScript se vuelven LOCALES a la función.

Las variables locales tienen alcance de función : solo se puede acceder desde dentro de la función.

// code here can NOT use carName
function myFunction() {
  var carName = "Volvo";
  // code here CAN use carName
}

By: https://www.w3schools.com/js/js_scope.asp

Dejo el código de la clase

const helloWorld = () => {
    const hello = 'Hello World';
    console.log(hello);
};

helloWorld();
//Este console.log va a arrojar un error ya que no existe la variable hello dentro del scope global. A esta sólo se puede acceder mediante la función
console.log(hello);

var scope = 'i am global';

const functionScope = () =>{
    var scope = 'i am just a local';
    const func = () =>{
        return scope;
    }
    console.log(func());
};
//Este console log va a mostrar la variable que está dentro de la función
console.log(functionScope);
//Este console log va a mostar la variable que está fuera del scope de la función, es decir, la variable global que definimos primero
console.log(scope);```

Local scope

Este scope nos permite acceder a una variable dentro de un bloque de código o una función y solamente puede ser llamado dentro de esta estructura, si queremos acceder fuera del bloque de código donde fue definida va a dar un error de definición.

En el scope local existe el ámbito léxico esto nos quiere decir que va a buscar una variable dentro del bloque en el que fue llamada y es el valor que va a tomar y si es que el mismo nombre de variable también existe fuera del ámbito en el que fue llamado este valor no sera re asignado porque toma el primer valor encontrado desde adentro hacia afuera.

El scope local tiene dos variantes en bloque y en funciones.

// Local scope

const helloWorld = () => {
  const hello = "Hello World";
  console.log(hello);
}

helloWorld();
console.log(hello);

var scope = "I am global";

const functionScope = () => {
  var scope = "I am just a local";
  const func = () => {
    return scope;
  }
  console.log(func());
}

functionScope();
console.log(scope);

Quiere decir que el alcance es limitado, el límite dependerá de si es var(funcion), let o const(bloque). Quiere decir que su uso está limitado a dentro de su scope, no afuera. El ámbito léxico es el responsable de que si tenemos varias variables con el mismo nombre (con distinto scope)se recurrirá a la “más cercana” con el scope mas cercano.

Para que el código no se reviente, podemos agregar un try…catch

const helloWorld = () => {
  const hello = "Hello World!";
  console.log("local hello:::: ", hello);
};

helloWorld();

try {
  console.log("global hello:::: ", hello);
} catch (error) {
  console.log("global hello error:::: ", error);
}

Qué es el Scope Local
Cuando puedes acceder a una variable únicamente en cierta parte del código, se dice que esa variable está declarada en el scope local. Estas también son conocidas como variables locales. Un ejemplo de esto es cuando una variable está declarada dentro de un bloque o una función. Si tratas de acceder a esta variable fuera de esta función o bloque, tendrás un error que dirá que la variable no está definida.

function platzi() {
	const soyEstudiante = true;
	console.log(soyEstudiante);
}

platzi(); // true
console.log(soyEstudiante); // soyEstudiante is not defined

Ámbito léxico es también llamado ámbito estático: si el ámbito de nombre de una variable es una cierta función, entonces su ámbito es el texto del programa de esa función; dentro de ese texto el nombre de la variable existe y está enlazada al valor de la variable, pero fuera del texto el nombre de la variable non existe.

El ámbito léxico es lo mismo que el contexto de ejecución?

//Las variables que esten declaradas en el scope local NO pueden ser llamadas desde el scope global

const saludar = () => {
    const nombre = "Victor"; // Esta variable solo existe en este scope local
    var nombreDos = "Victor Adrian"; // Estas variable solo existe en el scope local
    let nombreTres = "Victor Adrian Ramirez"; //Esta variable solo esta en el scope local
}
saludar();


var holaMundo = "Hola Mundo";

const validar = () => {
    var holaMundo = "Ya no es hola Mundo";
    const fuct = () => {
        return holaMundo;
    }
    console.log(fuct());
}
validar();

!!!

Nos permite acceder a una variable en un bloque de codigo o en una funcion y solamente en esa estructura, nunca fuera de ella.

Si tenemos varias variables declaradas en una funcion, no las podremos manipular si estamos fuera de esta. Solo si estamos dentro podremos trabajar con ellas. PERO cuando tenemos una variable de Scope global como vimos anteriormente, estas si pueden ser manipuladas dentro y FUERA De las funciones.

El ambito lexico es cuando nosotros reasignamos operaciones dentro de funciones para que estas funcionen puedan modificar y utilizar estas variables con el valor que le fue asignado dentro de la funcion. Si utilizamos despues la varible, nos dara el valor que le dimos de forma global, ya que solo dentro de la funcion obtuvo ese valor local.

yo siento que el output será i am just a local

Siempre de adentro pa ´juera

scope.png

El interprete de JavaScript busca la definición de la variable de adentro para afuera, hasta que la encuentra. Si esta definida varias veces, usa la que este mas cerca. Ver la siguiente imagen:
3-scope.png

<h4>Local Scope</h4>

Característica que define el alcance de una variable dentro de la misma porción del código de donde fue inicializada. Un claro ejemplo es cuando una variable ha sido declarada dentro de una función.

function hello () {
    let str = 'Hello World!'
		console.log(str);
}

console.log(str); // Output: undefined
hello(); // Output: "Hello World!"
<h4>Global Scope</h4>

Ya teniendo claro qué es un Local Scope, entender el Global Scope es más sencillo. Las variables con Global Scope no están dentro de funciones o bloques, por lo tanto se pueden acceder a ellas de manera global, incluso en funciones con varios niveles de profundidad

let str = 'Hello World!' 

function hello () {
    console.log(str);
    function hello2() {
        console.log(str);
    }
    hello2();
}

hello();
/* Output: 
"Hello World!
 Hello World!" */
<h4>Ámbito Léxico</h4>

Esto es lo que sucede cuando una variable local comparte nombre con una variable global. La variable local al ser ejecutada dentro de una función, no se verá afectada por el comportamiento de la que tenga scope global y viceversa.

var scope = "variable global"

const functionScope = () => {
    var scope = "variable local"; 
		/* scope al ser declarada dentro de una función, no sustituye
			 el valor de la variable scope con alcance global. Es básicamente
			 variable nueva. */
    const func = () => {
        return scope;
    }
    console.log(func());
}

functionScope();
console.log(scope);

LOCAL SCOPE 😄

//Scope Local en funciones
const helloWorld = () =>{

    const hello = 'string :)';
    //Accedemos desde dentro a nuestra variable
    console.log(hello);


}

helloWorld();
//Si accedieramos a la variable que esta en la funcion no podriamos
// Ya que esta definida solo en ese contexto
console.log(hello); // nos dice que no esta definida


//Ambito lexico 
/* La funcion tiene acceso a la variable de local y es la asignacion sobre la cual
   va a trabajar entonces al momento de hacer return de esa variable no toma en
   cuenta la del global si no la del local
   Y tambien al imprimir la variable de Global no se reasignara ya que la reasignacion
   esta dentro de la funcion, entonces quedara con el primer valor que le asignamos
   al momento de imprimir

*/
// Lo que hacemos es definir una variable con el mismo nombre en Global y local
// Dentro de la funcion reasignamos su valor 
// Luego se retorna dentro de otra funcion esa variable

 var scope = "i am global"

 const functionScope = () =>{

    var scope = 'i am just a local';
    const func = () =>{

        return scope
    }
    console.log(func());
 }

i am just local debe ser el resultado!

Scope
El scope determina la visibilidad de las variables

Local Scope

Las variables declaradas dentro de una función en JavaScript, únicamente van a poder ser accedidas dentro de la misma variable

Ejemplo

function greeting(){
var hello = "Hi friend"
console.log(hello)   //La variable únicamente es accesible dentro de la función en la cual fue creada
}
greeting()
console.log(hello) // La variable fuera de dicha función, deja de ser accesible, esto nos retorna un error

Mas info

El scope local solo tiene alcance en el bloque de código donde esta es definida.

let hello = 'Hello i'm global;
//Bloque de código 
const helloWorld = () => {
	const hello = 'Hello i'm local';
}```

Local Scope: es el alcance que tiene una variable que ha sido creada dentro de la misma función. Concretamente es quién limita una variable a solo existir en el bloque de código o función que ha sido creada.
·
Ámbito Léxico : Es la definición que se dá cuando una función tiene acceso a variables creadas dentro de ella, variables que solo habitan dentro de esta función (o bloque de código). Evita que tome variables (que pueden estar asignadas y con valores) del Scope Global, sino únicamente lo que exista dentro delo bloque o función.
.

Excelente clase!

Muy interesante

bien

Good

//ambito lexico:
var global = 'I am global'
const helloWorld = () => {
  var global = 'I am local'
  const func = () => {
    return global
  }
  //va imprimir la variable local i am local
  console.log(func())
}
helloWorld()
//va imprimir la variable global i am global
console.log(global)
//----------SCOPE LOCAL------------

const helloWorld = () => {
  const hello = "Hello World";
  console.log(hello);
};

helloWorld(); // La constante está asignada dentro de la función, por lo tanto, si se puede usar.
console.log(hello); // La variable no está establecida de forma global, por lo tanto no se puede usar. No está definida.

var scope = "I am global";

const functionScope = () => {
  var scope = "I am just a local";
  const func = () => {
    return scope;
  };
  console.log(func());
};

functionScope(); // Toma la variable local y no la global. Esto ocurre porque está definida dentro de su Scope. También se conoce como Ambito Léxico.
console.log(scope); // Toma la variable global porque no puede acceder a un scope local.

Yo creo que va a devolver la variable local.

como se llama el tema de visual studio code que esta utilizando el profesor ?

A la hora de decidir a qué ámbito pertenece una variable, el compilador de JavaScript comprueba si la variable está declarada dentro de la función donde se invoca (ámbito local de la función) si no es así, busca en el ámbito de la función que la contenga y así hasta llegar al ámbito global. Si la variable no fue declarada en ningún momento, el compilador la declara como variable global.
En ‘Strict mode’ el compilador no creará la nueva variable en ámbito global sino que devolverá un error por variable no declarada.

perfecto scope local 😄

Genial.

A seguir.

Las fijaciones declaradas e inicializadas dentro de un entorno local o bloque de código solo vivirán en su entorno local, no estarán tomadas en cuenta para el entorno global. Esto se conoce como ámbito léxico.

codigo de la clase

var scope = 'i am global';
const functionscope = () => {
    var scope = 'i am just a local';
    const func = () => {
        return scope
    }
    console.log(func());
};

functionscope();
console.log(scope); //no lo reasigna

A diferencia del Global Scope, el Local Scope solo nos permite acceder a las variables que fueron declaradas en ese bloque de codigo, el Lexical Scope nos permite usar nombres de varibles que ya fueron usadas en otro scope, pero esto no es muy buena practica.

Voy a utilizar el ejemplo del profesor Diego De Granda para explicar la diferencia entre variables globales y variables locales.
Las variables globales es el mundo de las hormigas, mientras que las variables locales es el mundo de los humanos.
Las hormigas pueden acceder a nuestro mundo y tomar cosas de él, pero nosotros no podemos acceder al mundo de las hormigas a tomas cosas de él.
En otras palabras, una variable global puede meterse en el scope local, pero una variable local no se puede meter en el scope global.

No sabía que se podían crear variables locales con el mismo nombre de las variables globales y que el valor dependía del contexto de ejecución. Gran clase Oscar

let tiene un scope al bloque de código mas cercano.
const tiene un scope al bloque de código mas cercano también, pero se usa para valores inmutables.
var tiene un scope a la función mas cercana y puede ser redeclardo y reasignado.

Es por ello que al llamar la función functionScope(), muestra el mensaje " i am just a local", porque la variable que esta fuera de la función es otra, es indiferente a la que esta dentro. A punta a otra dirección en memoria.

Mis apuntes (2) 😃

// 🔒 ALCANCE LOCAL (Local Scope) 

// 🔒 LET Y CONST como local scope 
const helloWorld = () => {
  const hello = "Hello World";
  console.log(hello);
};

helloWorld();
console.log(hello); //❌ ERROR no puedo acceder a una variable fuera de su scope (hello is not defined)

// 🔠 Ambito Lexico (Lexical scope)
var scope = "im global";

const functionScope = () => {
  var scope = "im just a local var";
  // 👷‍♀️ Al construirse la funcion, 🔍 el scope de la var representa un valor 🔒 local, no toma en cuenta ni reasigna la variable 🌎 global
  const func = () => {
    return scope;
  };
  console.log(func());
};

functionScope();
console.log(scope)

Local Scope
Las variables que definimos dentro de una función son variables locales, es decir se encuentran en el Scope local. Esto significa que este tipo de variables van a vivir únicamente dentro de la función en donde las hayamos declarado y si intentamos accederlas fuera de ella, dichas variables no van a estar definidas.
Esto nos permite decidir si queremos una variable solo para una determinada función.

en el minuto 4:36 retorna el string de la variable local creada dentro de la función global
var scope = “i am just a local”;

A esto se le llama el ámbito léxico, esto significa que mi función tiene acceso a esta variable y es la asignación sobre la cual va a estar trabajando. Entonces a lo que yo hago return de socope no estoy trabajando sobre la variable global sino local, es por eso que queda la global en segundo grado.

recordemos que scope es igual a alcance, lo que debemos preguntarnos es hasta donde llega el alcance de nuestra variable si es solo dentro de una funcion, o para todo el código

El local scope


Este nos permite acceder a una variable en un bloque de código o un a función pero solamente dentro de esta estructura.

const helloWorld = () => {
    const hello = 'Hello World'
    console.log(hello)
}

helloWorld()
console.log(hello)
<h3>Ámbito léxico</h3>

Esto significa que mi función tiene acceso a la variable scope dentro de la function, y es la asignación sobre la cual va a estar trabajando. Pero no reasigna la variable.

El alcance de una variable se define por su ubicación dentro del código fuente, y las funciones anidadas tienen acceso a las variables declaradas en su alcance externo. No importa de dónde se llame una función, o incluso cómo se llama, su alcance léxico depende solo de dónde se declaró la función.

var scope = `I'm global`

const functionScope = () => {
    var scope = `I'm just a local`
    const func = () => {
        return scope
    }
    console.log(func())
}

functionScope()

codigo de la clase :

 const helloWorld = () =>{
    const hello = 'Hello World';
    console.log(hello);
}

helloWorld()
console.log(hello); 

var scope ='i am global';

const functionScope = () => {
    var scope ='i am just a local';
    const func = () => {
        return scope;
    }

    console.log(func())
}

functionScope();
console.log(scope);```

wooooorales! genial!

Código clase:

//Declared globally
var hello = 'Hello';
    // VAR: Reclaiming variables is bad practice
    var hello = 'Hello +';
let world = 'Hello';
    // LET: DOES NOT ALLOW TO DECLARE
    let world = "Hello";
const helloWorld = 'Hello World';

const anotherFunction = () => {
    console.log(hello);
    console.log(world);
    console.log(helloWorld);
}
anotherFunction();

//***bad practice***
const helloWorld = () => {
    globalVar = "i'm global"
}
helloWorld();
console.log(globalVar);

//***bad practice***
const anotherFunction = () => {
    var localVar = globalVar = "Im Global";
}
anotherFunction();
console.log(globalVar);


Espero que a alguien le ayude esta explicación

/*
    El scope local le da a nuestras variables un tiempo de vida exclusivo al ttl del bloque 
    de código que lo contiene.
*/

const helloWorld = ()=>{
/*
    Tomemos como ejemplo la constante hello que fue declarada en la variable helloWorld.
    Si nosotros intentamos llamar la variable hello fuera de esta funcion obtendremos como
    resultado un error de referencia; esto es debido a que la variable hello solo existe dentro de 
    helloWorld. Una vez terminada la funcion la referencia a la variable deja de existir.
 */
    const hello = "hola mundo";
    console.log(hello);
}

helloWorld()
console.log(hello);

/*
    En este ejemplo la variable scope esta declarada de manera local a la raiz de mi archivo js.
*/
var scope = "i am global";

const functionScope = ()=>{

    /*
        En este caso en particular, la variable scope no redefine a la anterior, se define como una
        variable local a functionScope; de esta manera la variable local y la global mantienen
        su informacion intacta, ya que no se esta haciendo referencia a la misma localidad de memoria
    */
    var scope = "i am just a local"
    const func =()=>{
        /*Internamente func debe de trabajar con la variable de jerarquia mas cercana, es decir,
        el scope local a funcionScope, variable que a proposito de este tema, esta declarada de 
        manera global para func.*/
        return scope;
    }
    console.log(func())
}

functionScope()

/*Al termino de la ejecucion de functionScope, la variable scope local a esta funcion a dejado de 
existir y, por tal motivo, utiliza la variable que se declaro previamente a la funcion y que, aproposito
del tema en cuestion, es local a la raiz del documento*/
console.log(scope)

como se ve que esta usando var entonces se va redeclarar entonces output:

I am just a local

El Scope local nos permite acceder a una variable exclusivamente en un bloque de código o una función.
Una variable declarada con const dentro de una función tiene un scope local, por lo que esta solo podrá ser accedida desde dentro de la función. Si se intenta acceder a la variable fuera de la función nos aparecerá un error.

![](chapter3.png

¿ Ambito lexico === scope ? ¿Cuales son sus diferencias?

creo que retorna el string

El local scope se crea cuando declaro variables dentro de un bloque de código específico, cuando yo intento acceder a esta variable desde un scope global tendré un error, porque esta solo se encuentra en el contexto de ejecución de la función en la que se creó

Aun no lo ejecute pero deduzco que primero se reasignara la variable y por ultimo se mostrara el mensajes de ‘I am just a local’ ¿por que? porque se esta usado var como propiedad de la variable, y por lo visto VAR tiene un scope libre

var scope = "Im Global"

const functionScope = () => {
  var scope = "I am just a local"

  const func = () => {
    return scope
  }

  console.log(func())
}

functionScope()```

f

<h3>Hola Comunidad 😃</h3>

me gustaría compartirles un muy buen post sobre el léxico de JavaScript, al ver la clase no lo comprendí del todo pero después investigue y me tope con este post el cual fue muy útil y resolvió mis dudas

JavaScript

Saludos y Nunca Paren De Aprender

No hay caso. Javascript no para de confundirme.

Podriamos resumir a manera de humor que, lo que pasa en local, se queda en local, jejeje

Básicamente el ámbito léxico es que, si tu declaras una variable con el mismo nombre que una variable global, JavaScript no le hará caso y la tomará como que es una variable local (Que vive dentro de la función) Es decir, le va a dar prioridad al local scope en lugar de al global scope, por eso “léxico” por la prioridad que JavaScript le da:D!

Ambito lexico, las variables trabajan con los datos dentro de los bloques de codigo. Más no modifica las variables que estén fuera de él.

El alcance del scope local engloba a los elementos y los pone a disposición para su uso en bloques de código locales.

Lexical Scope / Ámbito Léxico: El intérprete de JavaScript funciona desde el ámbito de ejecución actual y funciona hasta encontrar la variable en cuestión. Si la variable no se encuentra en ningún ámbito, se genera una excepción.

Este tipo de búsqueda se llama ámbito léxico. El alcance de una variable se define por su ubicación dentro del código fuente, y las funciones anidadas tienen acceso a las variables declaradas en su alcance externo. No importa de dónde se llame una función, o incluso cómo se llama, su alcance léxico depende solo de dónde se declaró la función.

El scope se puede definir como el alcance que puede tener una variable en tu codigo.

El Local Scope: se refiere a la variable o funcion que esta dentro de un bloque o funcion especifica. Solo se pueden acceder a ellas (ejecutar o llamar) dentro del entrono en donde conviven.

El ambito lexico: se refiere a que una funcion puede acceder a una funcion o variable fuera de ella.Cada nivel interno puede acceder a sus niveles externos hasta poder alcanzarlas.

La forma en la que yo entiendo el lexical scope es de adentro hacia afuera. Es decir que JS siempre busca las variables en el bloque más interno desde donde haya sido llamada. Por ejemplo:

const scope = "I'm global";
const func1 = () => {
  const scope = "I'm local 1";
  const func2 = () => {
    const scope = "I'm local 2";
    const func3 = () => {
      const scope = "I'm local 3";
      console.log(scope);
    }
    func3();
  }
  func2();
}
func1();

En el código anterior la salida será

I'm local 3

Debido a que el console.log(scope) busca la variable dentro de func3() (desde donde fué llamado) y al encontrar la variable scope = “I’m local 3” entonces la imprime. Pero si eliminamos esa linea y dejamos esto:

const scope = "I'm global";
const func1 = () => {
  const scope = "I'm local 1";
  const func2 = () => {
    const scope = "I'm local 2";
    const func3 = () => {
      console.log(scope);
    }
    func3();
  }
  func2();
}
func1();

La salida es:

I'm local 2

Si observamos dentro de fun3() ya no existe ninguna definición de la variable scope, por lo que JS buscará por fuera de este bloque pasando a al bloque func2(), en donde encuentra const scope = “I’m local 2”. Y asi sucesivamente podriamos ir eliminando definiciones de scope de adentro hacia afuera:

const scope = "I'm global";
const func1 = () => {
  const scope = "I'm local 1";
  const func2 = () => {
    const func3 = () => {
      console.log(scope);
    }
    func3();
  }
  func2();
}
func1();

Cuya salida es:

I'm local 1

Finalmente tenemos:

const scope = "I'm global";
const func1 = () => {
  const func2 = () => {
    const func3 = () => {
      console.log(scope);
    }
    func3();
  }
  func2();
}
func1();

Cuya salida es:

I'm global

Pero este coportamiento siempre es exclusivamente de adentro hacia afuera, y por tanto si intentamos algo como esto:

const func1 = () => {
  const func2 = () => {
    const func3 = () => {
      const scope = "I'm local 3";
    }
    console.log(scope);
    func3();
  }
  func2();
}
func1();

JS devuelve un ReferenceError ya que console.log(scope) fue llamado desde func2(); por fuera de func3() en donde se encuentra definido const scope = “I’m local 3”. Por lo que JS no puede encontrarlo y devuelve el error.

Lo que entendí del ámbito léxico es que a pesar que tengas una variable global declarada e inicializada, puedes tener la misma variable declarada e inicializada con otro valor dentro de una función y esta última no reasignará su valor a la variable global.

El scope local nos permite acceder una variable en un bloque de código o estructura, como las funciones. Por lo tanto el scope global no puede acceder a las variables dentro de un bloque de código.

Si se anida una función dentro de otra, las variables de la primera función van a poder ser accedidas dentro de la segunda.

Ámbito léxico significa que una función busca variables en el contexto donde se definió, y no en el ámbito que la rodea.

Excelente el concepto de ambito léxico

const helloWorld = () => {
    const hello = 'Hello World';
    console.log(hello);
}

helloWorld();
console.log(hello);

var scope = 'i am globa';

const functionScope = () => {
    // a esto se le llama el ambito léxico. Esta variable scope es local y es diferente a la variable global scope, asi tengan el mismo nombre
    var scope = 'i am just a local'; 
    const func = () => {
        return scope
    }
    console.log(func());
}
    
functionScope();
console.log(scope);

AL ser una variable global y ser declarada con var, cuando se utiliza dentro de una funcion, puede reasignarse su valor.

Después cuando se declara una funcion dentro de la mima función y se regresa el valor de la variable local de la primera función, la variable local se hace global dentro de ese contexto. Por lo que el resultado es I am local.

No se si me redacción fue lo bastante buena para darme a entender jaja

//ejemplo de ambito lexico
let hello = "hello"
{
  let world = "world"
  {
    let js = "javascript"
    {
      const funcion = () => {
        return `${hello} ${world} ${js}`
      }
      //la funcion puede alcanzar las variables definidas en bloques superiores
      console.log(funcion())
    }
  }
}

Scope Local: Nos permite acceder a una variable en un bloque de código o una función, sólo tenemos acceso a ella en esa estructura.

Variables locales de JavaScript
Las variables declaradas dentro de una función de JavaScript se vuelven LOCALES a la función.

Las variables locales tienen alcance de función : solo se puede acceder desde dentro de la función.

// code here can NOT use carName
function myFunction() {
  var carName = "Volvo";
  // code here CAN use carName
}

By: https://www.w3schools.com/js/js_scope.asp

Dejo el código de la clase

const helloWorld = () => {
    const hello = 'Hello World';
    console.log(hello);
};

helloWorld();
//Este console.log va a arrojar un error ya que no existe la variable hello dentro del scope global. A esta sólo se puede acceder mediante la función
console.log(hello);

var scope = 'i am global';

const functionScope = () =>{
    var scope = 'i am just a local';
    const func = () =>{
        return scope;
    }
    console.log(func());
};
//Este console log va a mostrar la variable que está dentro de la función
console.log(functionScope);
//Este console log va a mostar la variable que está fuera del scope de la función, es decir, la variable global que definimos primero
console.log(scope);```

Local scope

Este scope nos permite acceder a una variable dentro de un bloque de código o una función y solamente puede ser llamado dentro de esta estructura, si queremos acceder fuera del bloque de código donde fue definida va a dar un error de definición.

En el scope local existe el ámbito léxico esto nos quiere decir que va a buscar una variable dentro del bloque en el que fue llamada y es el valor que va a tomar y si es que el mismo nombre de variable también existe fuera del ámbito en el que fue llamado este valor no sera re asignado porque toma el primer valor encontrado desde adentro hacia afuera.

El scope local tiene dos variantes en bloque y en funciones.

// Local scope

const helloWorld = () => {
  const hello = "Hello World";
  console.log(hello);
}

helloWorld();
console.log(hello);

var scope = "I am global";

const functionScope = () => {
  var scope = "I am just a local";
  const func = () => {
    return scope;
  }
  console.log(func());
}

functionScope();
console.log(scope);

Quiere decir que el alcance es limitado, el límite dependerá de si es var(funcion), let o const(bloque). Quiere decir que su uso está limitado a dentro de su scope, no afuera. El ámbito léxico es el responsable de que si tenemos varias variables con el mismo nombre (con distinto scope)se recurrirá a la “más cercana” con el scope mas cercano.

Para que el código no se reviente, podemos agregar un try…catch

const helloWorld = () => {
  const hello = "Hello World!";
  console.log("local hello:::: ", hello);
};

helloWorld();

try {
  console.log("global hello:::: ", hello);
} catch (error) {
  console.log("global hello error:::: ", error);
}

Qué es el Scope Local
Cuando puedes acceder a una variable únicamente en cierta parte del código, se dice que esa variable está declarada en el scope local. Estas también son conocidas como variables locales. Un ejemplo de esto es cuando una variable está declarada dentro de un bloque o una función. Si tratas de acceder a esta variable fuera de esta función o bloque, tendrás un error que dirá que la variable no está definida.

function platzi() {
	const soyEstudiante = true;
	console.log(soyEstudiante);
}

platzi(); // true
console.log(soyEstudiante); // soyEstudiante is not defined

Ámbito léxico es también llamado ámbito estático: si el ámbito de nombre de una variable es una cierta función, entonces su ámbito es el texto del programa de esa función; dentro de ese texto el nombre de la variable existe y está enlazada al valor de la variable, pero fuera del texto el nombre de la variable non existe.

El ámbito léxico es lo mismo que el contexto de ejecución?

//Las variables que esten declaradas en el scope local NO pueden ser llamadas desde el scope global

const saludar = () => {
    const nombre = "Victor"; // Esta variable solo existe en este scope local
    var nombreDos = "Victor Adrian"; // Estas variable solo existe en el scope local
    let nombreTres = "Victor Adrian Ramirez"; //Esta variable solo esta en el scope local
}
saludar();


var holaMundo = "Hola Mundo";

const validar = () => {
    var holaMundo = "Ya no es hola Mundo";
    const fuct = () => {
        return holaMundo;
    }
    console.log(fuct());
}
validar();

!!!

Nos permite acceder a una variable en un bloque de codigo o en una funcion y solamente en esa estructura, nunca fuera de ella.

Si tenemos varias variables declaradas en una funcion, no las podremos manipular si estamos fuera de esta. Solo si estamos dentro podremos trabajar con ellas. PERO cuando tenemos una variable de Scope global como vimos anteriormente, estas si pueden ser manipuladas dentro y FUERA De las funciones.

El ambito lexico es cuando nosotros reasignamos operaciones dentro de funciones para que estas funcionen puedan modificar y utilizar estas variables con el valor que le fue asignado dentro de la funcion. Si utilizamos despues la varible, nos dara el valor que le dimos de forma global, ya que solo dentro de la funcion obtuvo ese valor local.

yo siento que el output será i am just a local

Siempre de adentro pa ´juera

scope.png

El interprete de JavaScript busca la definición de la variable de adentro para afuera, hasta que la encuentra. Si esta definida varias veces, usa la que este mas cerca. Ver la siguiente imagen:
3-scope.png

<h4>Local Scope</h4>

Característica que define el alcance de una variable dentro de la misma porción del código de donde fue inicializada. Un claro ejemplo es cuando una variable ha sido declarada dentro de una función.

function hello () {
    let str = 'Hello World!'
		console.log(str);
}

console.log(str); // Output: undefined
hello(); // Output: "Hello World!"
<h4>Global Scope</h4>

Ya teniendo claro qué es un Local Scope, entender el Global Scope es más sencillo. Las variables con Global Scope no están dentro de funciones o bloques, por lo tanto se pueden acceder a ellas de manera global, incluso en funciones con varios niveles de profundidad

let str = 'Hello World!' 

function hello () {
    console.log(str);
    function hello2() {
        console.log(str);
    }
    hello2();
}

hello();
/* Output: 
"Hello World!
 Hello World!" */
<h4>Ámbito Léxico</h4>

Esto es lo que sucede cuando una variable local comparte nombre con una variable global. La variable local al ser ejecutada dentro de una función, no se verá afectada por el comportamiento de la que tenga scope global y viceversa.

var scope = "variable global"

const functionScope = () => {
    var scope = "variable local"; 
		/* scope al ser declarada dentro de una función, no sustituye
			 el valor de la variable scope con alcance global. Es básicamente
			 variable nueva. */
    const func = () => {
        return scope;
    }
    console.log(func());
}

functionScope();
console.log(scope);

LOCAL SCOPE 😄

//Scope Local en funciones
const helloWorld = () =>{

    const hello = 'string :)';
    //Accedemos desde dentro a nuestra variable
    console.log(hello);


}

helloWorld();
//Si accedieramos a la variable que esta en la funcion no podriamos
// Ya que esta definida solo en ese contexto
console.log(hello); // nos dice que no esta definida


//Ambito lexico 
/* La funcion tiene acceso a la variable de local y es la asignacion sobre la cual
   va a trabajar entonces al momento de hacer return de esa variable no toma en
   cuenta la del global si no la del local
   Y tambien al imprimir la variable de Global no se reasignara ya que la reasignacion
   esta dentro de la funcion, entonces quedara con el primer valor que le asignamos
   al momento de imprimir

*/
// Lo que hacemos es definir una variable con el mismo nombre en Global y local
// Dentro de la funcion reasignamos su valor 
// Luego se retorna dentro de otra funcion esa variable

 var scope = "i am global"

 const functionScope = () =>{

    var scope = 'i am just a local';
    const func = () =>{

        return scope
    }
    console.log(func());
 }

i am just local debe ser el resultado!

Scope
El scope determina la visibilidad de las variables

Local Scope

Las variables declaradas dentro de una función en JavaScript, únicamente van a poder ser accedidas dentro de la misma variable

Ejemplo

function greeting(){
var hello = "Hi friend"
console.log(hello)   //La variable únicamente es accesible dentro de la función en la cual fue creada
}
greeting()
console.log(hello) // La variable fuera de dicha función, deja de ser accesible, esto nos retorna un error

Mas info

El scope local solo tiene alcance en el bloque de código donde esta es definida.

let hello = 'Hello i'm global;
//Bloque de código 
const helloWorld = () => {
	const hello = 'Hello i'm local';
}```

Local Scope: es el alcance que tiene una variable que ha sido creada dentro de la misma función. Concretamente es quién limita una variable a solo existir en el bloque de código o función que ha sido creada.
·
Ámbito Léxico : Es la definición que se dá cuando una función tiene acceso a variables creadas dentro de ella, variables que solo habitan dentro de esta función (o bloque de código). Evita que tome variables (que pueden estar asignadas y con valores) del Scope Global, sino únicamente lo que exista dentro delo bloque o función.
.

Excelente clase!

Muy interesante

bien

Good

//ambito lexico:
var global = 'I am global'
const helloWorld = () => {
  var global = 'I am local'
  const func = () => {
    return global
  }
  //va imprimir la variable local i am local
  console.log(func())
}
helloWorld()
//va imprimir la variable global i am global
console.log(global)
//----------SCOPE LOCAL------------

const helloWorld = () => {
  const hello = "Hello World";
  console.log(hello);
};

helloWorld(); // La constante está asignada dentro de la función, por lo tanto, si se puede usar.
console.log(hello); // La variable no está establecida de forma global, por lo tanto no se puede usar. No está definida.

var scope = "I am global";

const functionScope = () => {
  var scope = "I am just a local";
  const func = () => {
    return scope;
  };
  console.log(func());
};

functionScope(); // Toma la variable local y no la global. Esto ocurre porque está definida dentro de su Scope. También se conoce como Ambito Léxico.
console.log(scope); // Toma la variable global porque no puede acceder a un scope local.

Yo creo que va a devolver la variable local.

como se llama el tema de visual studio code que esta utilizando el profesor ?

A la hora de decidir a qué ámbito pertenece una variable, el compilador de JavaScript comprueba si la variable está declarada dentro de la función donde se invoca (ámbito local de la función) si no es así, busca en el ámbito de la función que la contenga y así hasta llegar al ámbito global. Si la variable no fue declarada en ningún momento, el compilador la declara como variable global.
En ‘Strict mode’ el compilador no creará la nueva variable en ámbito global sino que devolverá un error por variable no declarada.

perfecto scope local 😄

Genial.

A seguir.

Las fijaciones declaradas e inicializadas dentro de un entorno local o bloque de código solo vivirán en su entorno local, no estarán tomadas en cuenta para el entorno global. Esto se conoce como ámbito léxico.

codigo de la clase

var scope = 'i am global';
const functionscope = () => {
    var scope = 'i am just a local';
    const func = () => {
        return scope
    }
    console.log(func());
};

functionscope();
console.log(scope); //no lo reasigna

A diferencia del Global Scope, el Local Scope solo nos permite acceder a las variables que fueron declaradas en ese bloque de codigo, el Lexical Scope nos permite usar nombres de varibles que ya fueron usadas en otro scope, pero esto no es muy buena practica.

Voy a utilizar el ejemplo del profesor Diego De Granda para explicar la diferencia entre variables globales y variables locales.
Las variables globales es el mundo de las hormigas, mientras que las variables locales es el mundo de los humanos.
Las hormigas pueden acceder a nuestro mundo y tomar cosas de él, pero nosotros no podemos acceder al mundo de las hormigas a tomas cosas de él.
En otras palabras, una variable global puede meterse en el scope local, pero una variable local no se puede meter en el scope global.

No sabía que se podían crear variables locales con el mismo nombre de las variables globales y que el valor dependía del contexto de ejecución. Gran clase Oscar

let tiene un scope al bloque de código mas cercano.
const tiene un scope al bloque de código mas cercano también, pero se usa para valores inmutables.
var tiene un scope a la función mas cercana y puede ser redeclardo y reasignado.

Es por ello que al llamar la función functionScope(), muestra el mensaje " i am just a local", porque la variable que esta fuera de la función es otra, es indiferente a la que esta dentro. A punta a otra dirección en memoria.

Mis apuntes (2) 😃

// 🔒 ALCANCE LOCAL (Local Scope) 

// 🔒 LET Y CONST como local scope 
const helloWorld = () => {
  const hello = "Hello World";
  console.log(hello);
};

helloWorld();
console.log(hello); //❌ ERROR no puedo acceder a una variable fuera de su scope (hello is not defined)

// 🔠 Ambito Lexico (Lexical scope)
var scope = "im global";

const functionScope = () => {
  var scope = "im just a local var";
  // 👷‍♀️ Al construirse la funcion, 🔍 el scope de la var representa un valor 🔒 local, no toma en cuenta ni reasigna la variable 🌎 global
  const func = () => {
    return scope;
  };
  console.log(func());
};

functionScope();
console.log(scope)

Local Scope
Las variables que definimos dentro de una función son variables locales, es decir se encuentran en el Scope local. Esto significa que este tipo de variables van a vivir únicamente dentro de la función en donde las hayamos declarado y si intentamos accederlas fuera de ella, dichas variables no van a estar definidas.
Esto nos permite decidir si queremos una variable solo para una determinada función.

en el minuto 4:36 retorna el string de la variable local creada dentro de la función global
var scope = “i am just a local”;

A esto se le llama el ámbito léxico, esto significa que mi función tiene acceso a esta variable y es la asignación sobre la cual va a estar trabajando. Entonces a lo que yo hago return de socope no estoy trabajando sobre la variable global sino local, es por eso que queda la global en segundo grado.

recordemos que scope es igual a alcance, lo que debemos preguntarnos es hasta donde llega el alcance de nuestra variable si es solo dentro de una funcion, o para todo el código

El local scope


Este nos permite acceder a una variable en un bloque de código o un a función pero solamente dentro de esta estructura.

const helloWorld = () => {
    const hello = 'Hello World'
    console.log(hello)
}

helloWorld()
console.log(hello)
<h3>Ámbito léxico</h3>

Esto significa que mi función tiene acceso a la variable scope dentro de la function, y es la asignación sobre la cual va a estar trabajando. Pero no reasigna la variable.

El alcance de una variable se define por su ubicación dentro del código fuente, y las funciones anidadas tienen acceso a las variables declaradas en su alcance externo. No importa de dónde se llame una función, o incluso cómo se llama, su alcance léxico depende solo de dónde se declaró la función.

var scope = `I'm global`

const functionScope = () => {
    var scope = `I'm just a local`
    const func = () => {
        return scope
    }
    console.log(func())
}

functionScope()

codigo de la clase :

 const helloWorld = () =>{
    const hello = 'Hello World';
    console.log(hello);
}

helloWorld()
console.log(hello); 

var scope ='i am global';

const functionScope = () => {
    var scope ='i am just a local';
    const func = () => {
        return scope;
    }

    console.log(func())
}

functionScope();
console.log(scope);```

wooooorales! genial!

Código clase:

//Declared globally
var hello = 'Hello';
    // VAR: Reclaiming variables is bad practice
    var hello = 'Hello +';
let world = 'Hello';
    // LET: DOES NOT ALLOW TO DECLARE
    let world = "Hello";
const helloWorld = 'Hello World';

const anotherFunction = () => {
    console.log(hello);
    console.log(world);
    console.log(helloWorld);
}
anotherFunction();

//***bad practice***
const helloWorld = () => {
    globalVar = "i'm global"
}
helloWorld();
console.log(globalVar);

//***bad practice***
const anotherFunction = () => {
    var localVar = globalVar = "Im Global";
}
anotherFunction();
console.log(globalVar);


Espero que a alguien le ayude esta explicación

/*
    El scope local le da a nuestras variables un tiempo de vida exclusivo al ttl del bloque 
    de código que lo contiene.
*/

const helloWorld = ()=>{
/*
    Tomemos como ejemplo la constante hello que fue declarada en la variable helloWorld.
    Si nosotros intentamos llamar la variable hello fuera de esta funcion obtendremos como
    resultado un error de referencia; esto es debido a que la variable hello solo existe dentro de 
    helloWorld. Una vez terminada la funcion la referencia a la variable deja de existir.
 */
    const hello = "hola mundo";
    console.log(hello);
}

helloWorld()
console.log(hello);

/*
    En este ejemplo la variable scope esta declarada de manera local a la raiz de mi archivo js.
*/
var scope = "i am global";

const functionScope = ()=>{

    /*
        En este caso en particular, la variable scope no redefine a la anterior, se define como una
        variable local a functionScope; de esta manera la variable local y la global mantienen
        su informacion intacta, ya que no se esta haciendo referencia a la misma localidad de memoria
    */
    var scope = "i am just a local"
    const func =()=>{
        /*Internamente func debe de trabajar con la variable de jerarquia mas cercana, es decir,
        el scope local a funcionScope, variable que a proposito de este tema, esta declarada de 
        manera global para func.*/
        return scope;
    }
    console.log(func())
}

functionScope()

/*Al termino de la ejecucion de functionScope, la variable scope local a esta funcion a dejado de 
existir y, por tal motivo, utiliza la variable que se declaro previamente a la funcion y que, aproposito
del tema en cuestion, es local a la raiz del documento*/
console.log(scope)

como se ve que esta usando var entonces se va redeclarar entonces output:

I am just a local

El Scope local nos permite acceder a una variable exclusivamente en un bloque de código o una función.
Una variable declarada con const dentro de una función tiene un scope local, por lo que esta solo podrá ser accedida desde dentro de la función. Si se intenta acceder a la variable fuera de la función nos aparecerá un error.

![](chapter3.png

¿ Ambito lexico === scope ? ¿Cuales son sus diferencias?

creo que retorna el string

El local scope se crea cuando declaro variables dentro de un bloque de código específico, cuando yo intento acceder a esta variable desde un scope global tendré un error, porque esta solo se encuentra en el contexto de ejecución de la función en la que se creó

Aun no lo ejecute pero deduzco que primero se reasignara la variable y por ultimo se mostrara el mensajes de ‘I am just a local’ ¿por que? porque se esta usado var como propiedad de la variable, y por lo visto VAR tiene un scope libre

var scope = "Im Global"

const functionScope = () => {
  var scope = "I am just a local"

  const func = () => {
    return scope
  }

  console.log(func())
}

functionScope()```

f

<h3>Hola Comunidad 😃</h3>

me gustaría compartirles un muy buen post sobre el léxico de JavaScript, al ver la clase no lo comprendí del todo pero después investigue y me tope con este post el cual fue muy útil y resolvió mis dudas

JavaScript

Saludos y Nunca Paren De Aprender

No hay caso. Javascript no para de confundirme.

Podriamos resumir a manera de humor que, lo que pasa en local, se queda en local, jejeje

Básicamente el ámbito léxico es que, si tu declaras una variable con el mismo nombre que una variable global, JavaScript no le hará caso y la tomará como que es una variable local (Que vive dentro de la función) Es decir, le va a dar prioridad al local scope en lugar de al global scope, por eso “léxico” por la prioridad que JavaScript le da:D!

Ambito lexico, las variables trabajan con los datos dentro de los bloques de codigo. Más no modifica las variables que estén fuera de él.

El alcance del scope local engloba a los elementos y los pone a disposición para su uso en bloques de código locales.