Crea una cuenta o inicia sesi贸n

隆Contin煤a aprendiendo sin ning煤n costo! 脷nete y comienza a potenciar tu carrera

Local Scope

3/12

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Aportes 107

Preguntas 10

Ordenar por:

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.

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 = 鈥淚鈥檓 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 = 鈥淚鈥檓 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 = 鈥淚鈥檓 local 3鈥. Por lo que JS no puede encontrarlo y devuelve el error.

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.

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.

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.

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);

脕mbito l茅xico significa que una funci贸n busca variables en el contexto donde se defini贸, y no en el 谩mbito que la rodea.

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.

//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())
    }
  }
}

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

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

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:

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 鈥渓茅xico鈥 por la prioridad que JavaScript le da:D!

una forma facil de ver al Scope local es鈥

local =  lo que pasa en las Vegas... Se queda en las Vegas!

FIN

<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

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);```

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

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);

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.

脕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.

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 鈥渕谩s cercana鈥 con el scope mas cercano.

Para que el c贸digo no se reviente, podemos agregar un try鈥atch

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);
}

Las variables no deber铆an ser opacadas por otras
Esta practica de sobre opacar una variable declarada en un scope superior puede afectar la legibilidad (dificultad para leer e interpretar) del c贸digo y por lo tanto la mantenibilidad. Esto puede causar confusi贸n porque tal vez estas usando una variable pero en realidad estas utilizando otra.
Fuente

SonarLint es una extensi贸n que te ayuda a detectar y arreglar estos problemas que afectan la calidad del c贸digo.
Aunque pienso que primero debemos conocer estos problemas antes de usar una extensi贸n de este estilo.

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

Ambito Lexico

Para definir que es el 谩mbito l茅xico empecemos por definir que es el 谩mbito de las variables. El 谩mbito es la zona de nuestro c贸digo donde las variables puede ser ejecutadas, 贸sea es igual al scope, el 谩mbito l茅xico nos habla sobre el acceso que puede se puede tener a una variable dentro de un bloque de codigo, pues dentro de estos cualquier otro bloque de c贸digo puede acceder a ellas siempre y cuando se encuentren en el mismo 谩mbito.

Local Scope

Nos permite acceder a una variable en un bloque de c贸digo o en una funci贸n, as铆 solo se puede acceder a la variable dentro de esa estructura.

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

helloWorld() // --> Hello World
console.log(hello) // --> ReferenceError: hello is not defined

Una variable que se encuentra dentro de bloques de c贸digo o una funci贸n no puede ser llamada desde el scope global 贸 desde adentro de otra funci贸n.

var scope = 'i am global'

const functionScope = () => {
  var scope = 'i am just a local'
  const func = () => {
    return scope // --> 'i am just a local, esto se debe al campo l茅xico'
  }
  console.log(func())
}

functionScope() // -->'i am just a local'

console.log(scope) // --> 'i am global'

Debido al campo l茅xico de las variables, el return que se hace dentro de la funci贸n llamada 'func' es 鈥榠 am just a local鈥, porque se encuentra dentro de la funci贸n que re-declaro la variable scope .

Aporte compa帽ero @ivofacundo

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 alcance del scope local engloba a los elementos y los pone a disposici贸n para su uso en bloques de c贸digo locales.

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.

Aun no lo ejecute pero deduzco que primero se reasignara la variable y por ultimo se mostrara el mensajes de 鈥業 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()```

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贸

![](

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.

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

I am just a local

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)

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);


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);```

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()

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

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.

en el minuto 4:36 retorna el string de la variable local creada dentro de la funci贸n global
var scope = 鈥渋 am just a local鈥;

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.

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)

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.

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

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.

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.

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

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.

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 鈥楽trict mode鈥 el compilador no crear谩 la nueva variable en 谩mbito global sino que devolver谩 un error por variable no declarada.

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

//----------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.
//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)

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.
.

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';
}```

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

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());
 }
<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);

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.

//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();
// definimos variable con scope global
var hello = 'hello'

// al crear la funcion, creamos un scope local dentro de esta
const helloWorld = () => {
    // accedemos a la variable global y la reasignamos
    // en el scope local
    var hello = 'buenas tardes'
    // creamos un scope local dentro de un scope local
    const saludar=()=>{
        // retornamos un valor del scope local, que es donde
        // se encuentra la fucnion
        return hello
    }
    console.log(saludar())
}
helloWorld()
// mostramos en consola la variable global
console.log(hello)

Seg煤n lo que entend铆 es que el 谩mbito l茅xico significa que una funci贸n busca variables en el contexto donde se defini贸, y no en el 谩mbito que la rodea.

Resumen de la clase:

  • Nos permite acceder a una variable en un bloque de c贸digo o una funci贸n, y solamente podremos acceder a estar variable dentro de esta estructura.
    • Tiene scope local en bloques y scope local en funciones.
  • Si se intenta acceder a una variable definida dentro de una funci贸n, esto no ser谩 posible, debido al scope local.
  • Si se define una variable global y dentro de una funci贸n se asigna una variable local con el mismo nombre de la variable global, esta segunda variable local no reasignar谩 a la variable global, debido al scope global.

Resumen de la clase

// El console log de afuera no puede acceder a la variable const ya que se 
// encuentra de manera local en una funcion y no de manera global
// para poder acceder a ella
const helloWorld = () => {
   const hello = 'Hello World';
   console.log(hello);
};

helloWorld();
console.log(hello);

// NO se llama la variable global
// ya que dentro de la funcion estamos creando otra variable
// Y dentro de la funcion interna estamos llamando la variable local
var scope = 'Im global';

const functionScope = () => {
    var scope = "Im just a local";

    // Arrow function
    const func = () => {
        return scope
    }
    console.log(func());

}
functionScope();

Entend铆 que las variables trabajan bajo los conceptos del Scope Global y el Scope Local.
Scope Global permite que una variable pueda ser accedida desde cualquier parte de nuestro c贸digo, funci贸n o bloque de c贸digo, un bloque de c贸digo est谩 limitado por las llaves 鈥榹 }鈥 que normalmente usamos cuando declaramos una funci贸n.

Por otro lado, las funciones tambi茅n trabajan con un tipo Scope, pero en este caso como indica el profesor se llama 谩mbito l茅xico, y se refiere a todo aquello que puede ser accedido dentro de una funci贸n.

Variables -> Trabajan con el Scope Global y Local.
Funciones -> Trabajan con el 脕mbito L茅xico.

脕mbito de ejecuci贸n de una funci贸n

Cuando una funci贸n es declarada se crea un nuevo 谩mbito de ejecuci贸n relacionado con ella, dentro de 茅ste las variables pueden ser declaradas e inicializadas de manera independiente al c贸digo que existe fuera de la funci贸n.
.

B煤squeda de variables por parte de una funci贸n

Si tenemos una funci贸n anidada y 茅sta requiere de de una variable, entonces la buscara partiendo de su 谩mbito de ejecuci贸n y continuando con el entorno de ejecuci贸n externo inmediato, llam茅mosle entorno A, que es el entorno de la funci贸n que la contiene. Si la variable a煤n no ha sido hallada, entonces la buscar谩 en el entorno externo inmediato al entorno A, digamos el entorno B. 脡ste proceso seguir谩 hasta que la variable sea encontrada o se genere una excepci贸n, es decir, que la funci贸n no sea encontrada ni siquera en el entorno global.

Amigos, aqu铆 algunas notas de la clase:
.

.
Espero que les ayuden.
(鈱愨枲_鈻)

Buena clase, con esta lecci贸n del profe Oscar y la del profe Diego, vengo entendiendo el tema del scope muy bien.

Cuando creamos una nueva funcion creamos un nuevo espacio donde si declaramos una variable va a ser global solo para funciones y constantes qie esten adentro de nuestra funcion primcipal. / es facil de entender si cada vez que creas una nueva funcion lo imahinas como un nuevo mundo o espacio donde si dec帽ars variables con var tu funcion la tomara como global pero solo para ella y su adentro. / almenos, asi lo entiendo yo.

Si se ejecuta la funci贸n (functionScope) se retornar铆a la cadena: 鈥淚 am just a local鈥, debido a que la funci贸n (func) que es la que vive dentro de la funci贸n original, retorna la variable <scope>, la cual s贸lo vive dentro de la funci贸n original (functionScope).
Contrario a que si hicieramos un console.log a <scope> fuera de cualquier funci贸n, en ese caso, nos retornar铆a la cadena de texto: 鈥淚 am global鈥.

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);```

Yo pienso que func tomara la variable scope dentro de la funcion functionScope, e imprimira en la consola " i am just a local"

Pienso que ejecutara lo que se encuentra dentro de la function local es decir i am just a local

En JavaScript las funciones tienen su propio 谩mbito l茅xico, lo que quiere decir que depende de c贸mo son declaradas en el c贸digo y no de cuando se ejecutan.
S贸lo las funciones pueden crear un nuevo 谩mbito y como excepci贸n, los bloques catch tambi茅n crean su propio 谩mbito. Con la introducci贸n de las variables let y const en ES6, tambi茅n tenemos a nuestra disposici贸n 谩mbito de bloque.

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.

驴Cu谩l de las siguientes opciones NO se puede considerar como una variable global?

let scope = 鈥淚 am global鈥;

Segun la prueba de Platzi esto debe ser considerado un variable global鈥 interesante鈥 驴Que opinas?

Est谩 explicaci贸n me ayudo a comprender mejor el 脕mbito l茅xico
La funci贸n iniciar() crea una variable local llamada nombre y una funci贸n interna llamada mostrarNombre(). Por ser una funci贸n interna, esta 煤ltima solo est谩 disponible dentro del cuerpo de iniciar(). Notemos a su vez que mostrarNombre() no tiene ninguna variable propia, pero, dado que las funciones internas tienen acceso a las variables de las funciones externas, mostrarNombre() puede acceder a la variable nombre declarada en la funci贸n iniciar().

function iniciar() {
  var nombre = "Mozilla";  // La variable nombre es una variable local creada por iniciar.
  function mostrarNombre() {  // La funci贸n mostrarNombre es una funci贸n interna, una clausura.
    alert(nombre);  // Usa una variable declarada en la funci贸n externa.
  }
  mostrarNombre();
}
iniciar();  

驴Qu茅 es el 谩mbito l茅xico?

En JavaScript las funciones tienen su propio 谩mbito l茅xico, lo que quiere decir que depende de c贸mo son declaradas en el c贸digo y no de cuando se ejecutan. La variable cuando la declaramos en global tiene el valor que le asignamos en el Scope Global. Pero, si dentro de una funci贸n declaramos una variable con el mismo nombre s贸lo tendr谩 el valor que se le asign贸 en esa funci贸n, es decir, esa variable solo existe dentro de la funci贸n y trabajar谩 con ella, no con la global. Para acceder a esa variable local tenemos que llamar a la funci贸n, y la otra variable global no cambia el valor sino que es el mismo.

var scope = "Soy global";
//Solo tiene el valor que se declar贸 aqu铆

const functionScope = () => {
  var scope = "Soy una variable local";
	//La funci贸n solo trabaja con esta variable, no con la global
  const func = () => {
    return scope;
  };
  console.log(func());
	//Mandamos a llamar la funci贸n de retorno
};

functionScope();
// > Soy una variable local 
console.log(scope);
// > Soy global

En otras palabras el 谩mbito l茅xico funciona de la siguiente manera:
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.

Scope Local nos permite acceder a una variable en un blque de codigo o en una funci贸n, solamente en esta estructura:

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

El scope es una colecci贸n de variables y las reglas para su ejecuci贸n. S贸lo el c贸digo dentro de una funci贸n puede acceder a las variables de 谩mbito de esa funci贸n.En la clase podemos observar una funci贸n anidada que returna una variable que est谩 por fuera de su scope, esto es posible ya que el 谩mbito m谩s interno puede acceder a las variables externas dentro de la funci贸n externa

var scope = "i am global";

const functionScope = () => {
    var scope = 'i am just a local'
    const func = () => {
        return scope;
    }
    console.log(func());
}
functionScope(); //Return: i am just a local
console.log(scope); //Return: i am globall

Lo que entend铆 de 谩mbito l茅xico es que una funci贸n busca variables en el contexto que se defini贸 y no en el 谩mbito que la rodea, es decir, que la funci贸n buscar谩 primero dentro de ella m谩s no fuera de ella. Adem谩s de haber le铆do un poquito por fuera encontr茅 que :
S贸lo las funciones pueden crear un nuevo 谩mbito y como excepci贸n, los bloques catch tambi茅n crean su propio 谩mbito

/* Scope local

Con una variable que se encuentra dentro de una estructura podemos trabajar solamente dentro de la estructura, ya que por fuera de ella no tendriamos acceso a la variable. */

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

helloWorld();

/* Aqui podemos ver como funciona un scope local en donde la funcion console.log(hello) accede a la variable hello y nos muestra su contenido en la consola y todo esto es posible ya que todo se esta ehecutando dentro de la function helloWorld, si llegramos a realizar el console.log(hello) fuera de la funcion tendriamos como resultado un error.
 */

const helloWorld = () => {
    const hello = 'Hello World mira que si';
    
};

helloWorld();

console.log(hello);

/* Como lo puedes ver en el output arroja  un error como resultado, ya que la variable hello tiene un scope local dentro de la funcion helloWorld y no podemos acceder a ella desde afuera de la funcion */

var scope = 'I`m global';

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


functionScope();
console.log(scope);

/* aqui podemos ver dentro de la functionScope() lo que se conoce como ambito lexico, la variable scope que se declara dentro de la funcion es totalmente diferente a la variable scope que tenemos por fuera de la funcion, por lo cual todo el codigo que se ejecute dentro de la funcion y utilice la variable scope tomara la variable scope que esta dentro de la funcion y no tomara la que esta fuera de ella, tambien ten en cuenta que la variable scope dentro de la funcion no reasigna valores a la que esta fuera de ella ni tiene ningun efecto sobre ella    */

excellente clase!!! simple claro sin vueltas!

Muestra 鈥渋 am just a local鈥

Me gusta como explicas, gracias Oscar!

Muestar esta variable var scope = 鈥渋m just a local鈥;

El 谩mbito l茅xico es lo mismo que el contexto de ejecuci贸n?

!!!

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

Siempre de adentro pa 麓juera

i am just local debe ser el resultado!

Excelente clase!

Muy interesante

bien

Good

Yo creo que va a devolver la variable local.

perfecto scope local 馃槃

Genial.

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Aportes 107

Preguntas 10

Ordenar por:

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.

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 = 鈥淚鈥檓 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 = 鈥淚鈥檓 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 = 鈥淚鈥檓 local 3鈥. Por lo que JS no puede encontrarlo y devuelve el error.

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.

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.

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.

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);

脕mbito l茅xico significa que una funci贸n busca variables en el contexto donde se defini贸, y no en el 谩mbito que la rodea.

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.

//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())
    }
  }
}

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

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

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:

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 鈥渓茅xico鈥 por la prioridad que JavaScript le da:D!

una forma facil de ver al Scope local es鈥

local =  lo que pasa en las Vegas... Se queda en las Vegas!

FIN

<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

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);```

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

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);

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.

脕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.

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 鈥渕谩s cercana鈥 con el scope mas cercano.

Para que el c贸digo no se reviente, podemos agregar un try鈥atch

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);
}

Las variables no deber铆an ser opacadas por otras
Esta practica de sobre opacar una variable declarada en un scope superior puede afectar la legibilidad (dificultad para leer e interpretar) del c贸digo y por lo tanto la mantenibilidad. Esto puede causar confusi贸n porque tal vez estas usando una variable pero en realidad estas utilizando otra.
Fuente

SonarLint es una extensi贸n que te ayuda a detectar y arreglar estos problemas que afectan la calidad del c贸digo.
Aunque pienso que primero debemos conocer estos problemas antes de usar una extensi贸n de este estilo.

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

Ambito Lexico

Para definir que es el 谩mbito l茅xico empecemos por definir que es el 谩mbito de las variables. El 谩mbito es la zona de nuestro c贸digo donde las variables puede ser ejecutadas, 贸sea es igual al scope, el 谩mbito l茅xico nos habla sobre el acceso que puede se puede tener a una variable dentro de un bloque de codigo, pues dentro de estos cualquier otro bloque de c贸digo puede acceder a ellas siempre y cuando se encuentren en el mismo 谩mbito.

Local Scope

Nos permite acceder a una variable en un bloque de c贸digo o en una funci贸n, as铆 solo se puede acceder a la variable dentro de esa estructura.

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

helloWorld() // --> Hello World
console.log(hello) // --> ReferenceError: hello is not defined

Una variable que se encuentra dentro de bloques de c贸digo o una funci贸n no puede ser llamada desde el scope global 贸 desde adentro de otra funci贸n.

var scope = 'i am global'

const functionScope = () => {
  var scope = 'i am just a local'
  const func = () => {
    return scope // --> 'i am just a local, esto se debe al campo l茅xico'
  }
  console.log(func())
}

functionScope() // -->'i am just a local'

console.log(scope) // --> 'i am global'

Debido al campo l茅xico de las variables, el return que se hace dentro de la funci贸n llamada 'func' es 鈥榠 am just a local鈥, porque se encuentra dentro de la funci贸n que re-declaro la variable scope .

Aporte compa帽ero @ivofacundo

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 alcance del scope local engloba a los elementos y los pone a disposici贸n para su uso en bloques de c贸digo locales.

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.

Aun no lo ejecute pero deduzco que primero se reasignara la variable y por ultimo se mostrara el mensajes de 鈥業 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()```

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贸

![](

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.

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

I am just a local

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)

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);


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);```

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()

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

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.

en el minuto 4:36 retorna el string de la variable local creada dentro de la funci贸n global
var scope = 鈥渋 am just a local鈥;

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.

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)

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.

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

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.

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.

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

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.

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 鈥楽trict mode鈥 el compilador no crear谩 la nueva variable en 谩mbito global sino que devolver谩 un error por variable no declarada.

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

//----------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.
//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)

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.
.

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';
}```

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

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());
 }
<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);

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.

//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();
// definimos variable con scope global
var hello = 'hello'

// al crear la funcion, creamos un scope local dentro de esta
const helloWorld = () => {
    // accedemos a la variable global y la reasignamos
    // en el scope local
    var hello = 'buenas tardes'
    // creamos un scope local dentro de un scope local
    const saludar=()=>{
        // retornamos un valor del scope local, que es donde
        // se encuentra la fucnion
        return hello
    }
    console.log(saludar())
}
helloWorld()
// mostramos en consola la variable global
console.log(hello)

Seg煤n lo que entend铆 es que el 谩mbito l茅xico significa que una funci贸n busca variables en el contexto donde se defini贸, y no en el 谩mbito que la rodea.

Resumen de la clase:

  • Nos permite acceder a una variable en un bloque de c贸digo o una funci贸n, y solamente podremos acceder a estar variable dentro de esta estructura.
    • Tiene scope local en bloques y scope local en funciones.
  • Si se intenta acceder a una variable definida dentro de una funci贸n, esto no ser谩 posible, debido al scope local.
  • Si se define una variable global y dentro de una funci贸n se asigna una variable local con el mismo nombre de la variable global, esta segunda variable local no reasignar谩 a la variable global, debido al scope global.

Resumen de la clase

// El console log de afuera no puede acceder a la variable const ya que se 
// encuentra de manera local en una funcion y no de manera global
// para poder acceder a ella
const helloWorld = () => {
   const hello = 'Hello World';
   console.log(hello);
};

helloWorld();
console.log(hello);

// NO se llama la variable global
// ya que dentro de la funcion estamos creando otra variable
// Y dentro de la funcion interna estamos llamando la variable local
var scope = 'Im global';

const functionScope = () => {
    var scope = "Im just a local";

    // Arrow function
    const func = () => {
        return scope
    }
    console.log(func());

}
functionScope();

Entend铆 que las variables trabajan bajo los conceptos del Scope Global y el Scope Local.
Scope Global permite que una variable pueda ser accedida desde cualquier parte de nuestro c贸digo, funci贸n o bloque de c贸digo, un bloque de c贸digo est谩 limitado por las llaves 鈥榹 }鈥 que normalmente usamos cuando declaramos una funci贸n.

Por otro lado, las funciones tambi茅n trabajan con un tipo Scope, pero en este caso como indica el profesor se llama 谩mbito l茅xico, y se refiere a todo aquello que puede ser accedido dentro de una funci贸n.

Variables -> Trabajan con el Scope Global y Local.
Funciones -> Trabajan con el 脕mbito L茅xico.

脕mbito de ejecuci贸n de una funci贸n

Cuando una funci贸n es declarada se crea un nuevo 谩mbito de ejecuci贸n relacionado con ella, dentro de 茅ste las variables pueden ser declaradas e inicializadas de manera independiente al c贸digo que existe fuera de la funci贸n.
.

B煤squeda de variables por parte de una funci贸n

Si tenemos una funci贸n anidada y 茅sta requiere de de una variable, entonces la buscara partiendo de su 谩mbito de ejecuci贸n y continuando con el entorno de ejecuci贸n externo inmediato, llam茅mosle entorno A, que es el entorno de la funci贸n que la contiene. Si la variable a煤n no ha sido hallada, entonces la buscar谩 en el entorno externo inmediato al entorno A, digamos el entorno B. 脡ste proceso seguir谩 hasta que la variable sea encontrada o se genere una excepci贸n, es decir, que la funci贸n no sea encontrada ni siquera en el entorno global.

Amigos, aqu铆 algunas notas de la clase:
.

.
Espero que les ayuden.
(鈱愨枲_鈻)

Buena clase, con esta lecci贸n del profe Oscar y la del profe Diego, vengo entendiendo el tema del scope muy bien.

Cuando creamos una nueva funcion creamos un nuevo espacio donde si declaramos una variable va a ser global solo para funciones y constantes qie esten adentro de nuestra funcion primcipal. / es facil de entender si cada vez que creas una nueva funcion lo imahinas como un nuevo mundo o espacio donde si dec帽ars variables con var tu funcion la tomara como global pero solo para ella y su adentro. / almenos, asi lo entiendo yo.

Si se ejecuta la funci贸n (functionScope) se retornar铆a la cadena: 鈥淚 am just a local鈥, debido a que la funci贸n (func) que es la que vive dentro de la funci贸n original, retorna la variable <scope>, la cual s贸lo vive dentro de la funci贸n original (functionScope).
Contrario a que si hicieramos un console.log a <scope> fuera de cualquier funci贸n, en ese caso, nos retornar铆a la cadena de texto: 鈥淚 am global鈥.

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);```

Yo pienso que func tomara la variable scope dentro de la funcion functionScope, e imprimira en la consola " i am just a local"

Pienso que ejecutara lo que se encuentra dentro de la function local es decir i am just a local

En JavaScript las funciones tienen su propio 谩mbito l茅xico, lo que quiere decir que depende de c贸mo son declaradas en el c贸digo y no de cuando se ejecutan.
S贸lo las funciones pueden crear un nuevo 谩mbito y como excepci贸n, los bloques catch tambi茅n crean su propio 谩mbito. Con la introducci贸n de las variables let y const en ES6, tambi茅n tenemos a nuestra disposici贸n 谩mbito de bloque.

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.

驴Cu谩l de las siguientes opciones NO se puede considerar como una variable global?

let scope = 鈥淚 am global鈥;

Segun la prueba de Platzi esto debe ser considerado un variable global鈥 interesante鈥 驴Que opinas?

Est谩 explicaci贸n me ayudo a comprender mejor el 脕mbito l茅xico
La funci贸n iniciar() crea una variable local llamada nombre y una funci贸n interna llamada mostrarNombre(). Por ser una funci贸n interna, esta 煤ltima solo est谩 disponible dentro del cuerpo de iniciar(). Notemos a su vez que mostrarNombre() no tiene ninguna variable propia, pero, dado que las funciones internas tienen acceso a las variables de las funciones externas, mostrarNombre() puede acceder a la variable nombre declarada en la funci贸n iniciar().

function iniciar() {
  var nombre = "Mozilla";  // La variable nombre es una variable local creada por iniciar.
  function mostrarNombre() {  // La funci贸n mostrarNombre es una funci贸n interna, una clausura.
    alert(nombre);  // Usa una variable declarada en la funci贸n externa.
  }
  mostrarNombre();
}
iniciar();  

驴Qu茅 es el 谩mbito l茅xico?

En JavaScript las funciones tienen su propio 谩mbito l茅xico, lo que quiere decir que depende de c贸mo son declaradas en el c贸digo y no de cuando se ejecutan. La variable cuando la declaramos en global tiene el valor que le asignamos en el Scope Global. Pero, si dentro de una funci贸n declaramos una variable con el mismo nombre s贸lo tendr谩 el valor que se le asign贸 en esa funci贸n, es decir, esa variable solo existe dentro de la funci贸n y trabajar谩 con ella, no con la global. Para acceder a esa variable local tenemos que llamar a la funci贸n, y la otra variable global no cambia el valor sino que es el mismo.

var scope = "Soy global";
//Solo tiene el valor que se declar贸 aqu铆

const functionScope = () => {
  var scope = "Soy una variable local";
	//La funci贸n solo trabaja con esta variable, no con la global
  const func = () => {
    return scope;
  };
  console.log(func());
	//Mandamos a llamar la funci贸n de retorno
};

functionScope();
// > Soy una variable local 
console.log(scope);
// > Soy global

En otras palabras el 谩mbito l茅xico funciona de la siguiente manera:
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.

Scope Local nos permite acceder a una variable en un blque de codigo o en una funci贸n, solamente en esta estructura:

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

El scope es una colecci贸n de variables y las reglas para su ejecuci贸n. S贸lo el c贸digo dentro de una funci贸n puede acceder a las variables de 谩mbito de esa funci贸n.En la clase podemos observar una funci贸n anidada que returna una variable que est谩 por fuera de su scope, esto es posible ya que el 谩mbito m谩s interno puede acceder a las variables externas dentro de la funci贸n externa

var scope = "i am global";

const functionScope = () => {
    var scope = 'i am just a local'
    const func = () => {
        return scope;
    }
    console.log(func());
}
functionScope(); //Return: i am just a local
console.log(scope); //Return: i am globall

Lo que entend铆 de 谩mbito l茅xico es que una funci贸n busca variables en el contexto que se defini贸 y no en el 谩mbito que la rodea, es decir, que la funci贸n buscar谩 primero dentro de ella m谩s no fuera de ella. Adem谩s de haber le铆do un poquito por fuera encontr茅 que :
S贸lo las funciones pueden crear un nuevo 谩mbito y como excepci贸n, los bloques catch tambi茅n crean su propio 谩mbito

/* Scope local

Con una variable que se encuentra dentro de una estructura podemos trabajar solamente dentro de la estructura, ya que por fuera de ella no tendriamos acceso a la variable. */

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

helloWorld();

/* Aqui podemos ver como funciona un scope local en donde la funcion console.log(hello) accede a la variable hello y nos muestra su contenido en la consola y todo esto es posible ya que todo se esta ehecutando dentro de la function helloWorld, si llegramos a realizar el console.log(hello) fuera de la funcion tendriamos como resultado un error.
 */

const helloWorld = () => {
    const hello = 'Hello World mira que si';
    
};

helloWorld();

console.log(hello);

/* Como lo puedes ver en el output arroja  un error como resultado, ya que la variable hello tiene un scope local dentro de la funcion helloWorld y no podemos acceder a ella desde afuera de la funcion */

var scope = 'I`m global';

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


functionScope();
console.log(scope);

/* aqui podemos ver dentro de la functionScope() lo que se conoce como ambito lexico, la variable scope que se declara dentro de la funcion es totalmente diferente a la variable scope que tenemos por fuera de la funcion, por lo cual todo el codigo que se ejecute dentro de la funcion y utilice la variable scope tomara la variable scope que esta dentro de la funcion y no tomara la que esta fuera de ella, tambien ten en cuenta que la variable scope dentro de la funcion no reasigna valores a la que esta fuera de ella ni tiene ningun efecto sobre ella    */

excellente clase!!! simple claro sin vueltas!

Muestra 鈥渋 am just a local鈥

Me gusta como explicas, gracias Oscar!

Muestar esta variable var scope = 鈥渋m just a local鈥;

El 谩mbito l茅xico es lo mismo que el contexto de ejecuci贸n?

!!!

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

Siempre de adentro pa 麓juera

i am just local debe ser el resultado!

Excelente clase!

Muy interesante

bien

Good

Yo creo que va a devolver la variable local.

perfecto scope local 馃槃

Genial.