CursosEmpresasBlogLiveConfPrecios

Ámbito estático

Clase 11 de 24 • Curso de Clean Code y Buenas Prácticas con JavaScript

Clase anteriorSiguiente clase

Contenido del curso

Introducción al Clean Code
  • 1
    Deuda técnica y refactorización de código

    Deuda técnica y refactorización de código

    07:03
  • 2
    Reglas del diseño simple

    Reglas del diseño simple

    02:49
  • 3
    Qué es Clean Code

    Qué es Clean Code

    02:18
Nombre y uso de las variables
  • 4
    Uso correcto de var, let y const

    Uso correcto de var, let y const

    12:13
  • 5
    Reglas para la nomenclatura

    Reglas para la nomenclatura

    05:33
  • 6
    Cómo nombrar según el tipo de dato

    Cómo nombrar según el tipo de dato

    11:50
  • 7

    Nombres de Variables y Funciones Correctos en JavaScript

    00:28
Ámbito de las variables
  • 8
    Ámbito global

    Ámbito global

    02:40
  • 9
    Ámbito local o de función

    Ámbito local o de función

    03:40
  • 10
    Ámbito de bloque

    Ámbito de bloque

    05:39
  • 11
    Ámbito estático

    Ámbito estático

    04:17
  • 12
    Hoisting

    Hoisting

    07:42
Funciones
  • 13
    Declaración y expresión de funciones

    Declaración y expresión de funciones

    03:52
  • 14
    Parámetros y argumentos

    Parámetros y argumentos

    16:04
  • 15
    Funciones de flecha y el this

    Funciones de flecha y el this

    10:01
Clases
  • 16
    POO con ES6 (constructores, métodos y herencia)

    POO con ES6 (constructores, métodos y herencia)

    07:40
  • 17
    Herencia en JavaScript

    Herencia en JavaScript

    09:45
  • 18
    Tamaño reducido (responsabilidad única)

    Tamaño reducido (responsabilidad única)

    06:36
  • 19
    Organización

    Organización

    03:23
Optimizaciones
  • 20
    Cuándo usar comentarios

    Cuándo usar comentarios

    04:09
  • 21
    Formato coherente (codear en equipos)

    Formato coherente (codear en equipos)

    03:37
  • 22
    Principio DRY

    Principio DRY

    06:02
  • 23

    Tipos de Algoritmos y Complejidad Big O en JavaScript

    03:09
Cierre
  • 24
    Sigue aprendiendo JavaScript

    Sigue aprendiendo JavaScript

    00:55
    Elcira Ibarra

    Elcira Ibarra

    student•
    hace 3 años

    JavaScript el ámbito de las variables tiene un comportamiento por defecto estático, esto quiere decir que se determina en tiempo de compilación y no de ejecución, a ésto se le llama ámbito léxico. No importa desde dónde se llame a la función, siempre va a dar como resultado el primer valor que se le definió a una variable. Ejemplo:

    const age = 28; function printAge() { console.log(age); } function mainApp() { const age = 26; printAge(); } mainApp(); // output es: 28, que es el primer valor que se le definió a la variable age
      Ana Rotela Cabrera

      Ana Rotela Cabrera

      student•
      hace un año

      Que buen resumen, muchas gracias

    Jose Gabriel Argüello

    Jose Gabriel Argüello

    student•
    hace 3 años

    no entiendo bien este punto, creo que da este resultado por los scopes ( global y local ) de la definición de variables, ( como indican otros comentarios), buscando encontré este ejemplo de ámbito léxico o estático , que esta relacionado a closures ( ver curso de Oscar Barajas),

    function createCounter() { let count = 0; function increment() { count++; console.log(count); } function decrement() { count--; console.log(count); } return { increment, decrement }; } const counter = createCounter(); counter.increment(); // Output: 1 counter.increment(); // Output: 2 counter.decrement(); // Output: 1

    En este ejemplo se crea la funcion createCounter(), que define dos funciones internas : increment() y decrement(), que aumentan o decrementan un contador count cuyo valor capturado .El ámbito estático (también conocido como ámbito léxico) nos permite que la función counter capture el valor de la variable count definida en createCounter(). Cuando se almacena el resultado de createCounter() en la variable counter, se está almacenando un objeto que tiene las funciones internas y la variable count encapsuladas en un closure. Esto permite que cuando se llama a los métodos increment() y decrement() de counter, se acceda al valor actual de count y se actualice su valor en consecuencia.

    Por lo tanto, el ámbito estático en este caso nos permite que las funciones internas increment() y decrement() "capturen" el valor de la variable count definida en su ámbito léxico y lo mantengan disponible en el tiempo, incluso después de que createCounter() haya terminado de ejecutarse.

      Irving Juárez

      Irving Juárez

      student•
      hace 2 años

      Me parece que es un buen ejemplo para Closure en JS. Sin embargo este código se puede mejorar usando Constructor Functions, que no es más que la implementación de las "clases" antes de ECS6.

      function CreateCounter(counterValue = 0) { this.counter = counterValue; } CreateCounter.prototype.increment = function () { this.counter++; return this.counter; }; CreateCounter.prototype.decrement = function () { this.counter--; return this.counter; }; const counter = new CreateCounter(); console.log( // Output: 1 counter.increment() ); console.log( // Output: 2 counter.increment() ); console.log( // Output: 1 counter.decrement() );
    Tomás André Peñaloza Avilés

    Tomás André Peñaloza Avilés

    student•
    hace un año

    Pero JS no es un lenguaje compilado!! Cómo es posible que tenga ámbito léxico? ---

    Si te preguntaste lo mismo que yo, déjame explicarte que incluso los lenguajes interpretados, como JavaScript, pasan por un proceso de compilación, aunque este suele ser más transparente y ocurre justo antes de la ejecución.

    JavaScript utiliza un modelo de compilación conocido como Just-in-Time (JIT). En este modelo, el código fuente de JavaScript se compila en bytecode o máquina virtual justo antes de ser ejecutado.

    Incluso en lenguajes interpretados como JavaScript, el ámbito de las variables se puede determinar durante la fase de compilación JIT, antes de que el código se ejecute realmente. Esto significa que el motor de JavaScript analiza la estructura del código y decide qué variables están disponibles en cada parte del código sin necesidad de ejecutarlo.

    Aimee Rodríguez

    Aimee Rodríguez

    student•
    hace 9 meses

    Para complementar un poco más lo que explicó la profesora, les dejo este video de otro profesor de Platzi: https://www.youtube.com/watch?v=s-7C09ymzK8

    Andrés Schuster

    Andrés Schuster

    student•
    hace 3 años

    El código imprimirá 28 en lugar de 26. Esto se debe a que la variable 'age' que se imprime en la función 'printAge()' es la variable global que se declaró fuera de cualquier función con el valor de 28. La variable 'age' declarada dentro de la función 'mainApp()' tiene un alcance limitado solo a la función 'mainApp()' y no afecta al valor de la variable global.

    El ámbito de una variable se refiere al alcance en el que se puede acceder y utilizar la variable en un programa. En JavaScript, existen dos tipos de ámbito: el ámbito global y el ámbito local. El ámbito global se refiere a cualquier variable que se declare fuera de cualquier función y está disponible para ser utilizada en todo el programa. El ámbito local se refiere a cualquier variable que se declare dentro de una función y solo está disponible dentro de esa función.

    El ámbito de una variable determina si se puede acceder y modificar la variable en diferentes partes del programa. En el ejemplo anterior, la variable global 'age' se puede acceder y utilizar en cualquier parte del programa, mientras que la variable local 'age' solo se puede acceder y utilizar dentro de la función 'mainApp()'. Cuando se llama a la función 'printAge()', se accede a la variable global 'age' en lugar de la variable local 'age' que se declaró dentro de la función 'mainApp()'. Por lo tanto, el valor impreso será 28.

    Javier Hernando Suarez Pachon

    Javier Hernando Suarez Pachon

    student•
    hace 8 meses

    En un entorno mas profesional, no tanto de ejecuciones locales, por ejemplo el navegador, el ejercicio de declarar dos veces la variable const age, no lo permite:

    Para uso de un cambio del valor de la variable, (por ejemplo por cambios de valor segun reglas de producto/negocio), recomiendo el uso de let:

    Ana Rotela Cabrera

    Ana Rotela Cabrera

    student•
    hace un año

    Resumen de la clase

    Diego Martínez VIlla

    Diego Martínez VIlla

    student•
    hace 3 años
    const age = 28; function printAge() { console.log(age); } function mainApp() { const age = 26; printAge(); } mainApp()

    Para mi esta explicación fue lo que me hizo entender lo que pasa.

    • Al llamar a mainApp(), la función printAge() se ejecuta, y ++como la variable age se busca en el ámbito léxico de la función printAge(), se encuentra la variable age definida en el alcance global++ (fuera de cualquier función), ++y no la variable age definida dentro de mainApp()++.

    • Por lo tanto, se imprime el valor 28, que es el valor de la variable age definida fuera de las funciones.

      Andres Felipe Bolaños Fernandez

      Andres Felipe Bolaños Fernandez

      student•
      hace 2 años

      Excelente.

    Diego Martínez VIlla

    Diego Martínez VIlla

    student•
    hace 3 años
    • Cuando se llama a la función, JavaScript busca las variables y funciones dentro de ese ámbito léxico y, si no se encuentran allí, busca en el ámbito léxico superior, que es el ámbito que contiene la función actual. Si aún no se encuentra la variable o función, JavaScript continúa buscando en ámbitos superiores hasta llegar al alcance global, que es el alcance más amplio y general en el que se definen todas las variables y funciones globales.

    • En resumen, el ámbito léxico en JavaScript es relativo a la función que se está ejecutando en un momento dado, y determina el alcance y la accesibilidad de las variables y funciones definidas dentro de esa función.

    • Si queremos controlar esto es cuando enviamos el dato que queremos como argumento de la función.

    Johan Sebastian

    Johan Sebastian

    student•
    hace 4 meses

    La edad es de 28

    Luis Eduardo Payano Villar

    Luis Eduardo Payano Villar

    student•
    hace un año
    Sandra Rosa Arroyo Paredes

    Sandra Rosa Arroyo Paredes

    student•
    hace un año

    El ámbito léxico, también conocido como ámbito estático, se refiere a cómo se determina la accesibilidad de las variables en JavaScript basándose en la ubicación de las declaraciones en el código fuente.

    Puntos clave:

    1. Definición: Se determina en el momento de la escritura del código, no durante la ejecución.
    2. Anidamiento: Las funciones pueden acceder a variables de sus funciones contenedoras.
    3. Búsqueda de variables:
      • Comienza en el ámbito local actual.
      • Si no se encuentra, busca en el ámbito exterior inmediato.
      • Continúa hasta llegar al ámbito global.
    4. Independencia de la ejecución: El ámbito de una función se mantiene sin importar dónde o cómo se llame.
    5. Closures: Permite que las funciones mantengan acceso a variables de su ámbito de creación, incluso después de que la función contenedora haya terminado.
    6. Shadowing: Variables con el mismo nombre en ámbitos internos "ocultan" las variables de ámbitos externos.
    7. Predictibilidad: Hace que el comportamiento del código sea más predecible y fácil de entender.

    Este concepto es fundamental para entender cómo JavaScript maneja la visibilidad y accesibilidad de las variables, y es crucial para trabajar efectivamente con funciones, especialmente en situaciones que involucran funciones anidadas y closures.

    Miguel Prada

    Miguel Prada

    student•
    hace 2 años

    pero no es que dentro de mainApp, age se sustituya, simplemente es que se está ejecutando printAge dentro de mainApp

    Jose Ever Muñoz Muñoz

    Jose Ever Muñoz Muñoz

    student•
    hace 2 años

    La edad es de 28, lo descubri porque vscode marca en un tono mas oscuro las variables que no usamos jeje

    Ulqernesh Karvenae

    Ulqernesh Karvenae

    student•
    hace 2 años

    28

    Juliette Alexandra Lopez Coy

    Juliette Alexandra Lopez Coy

    student•
    hace 3 años

    Imprime: 28

    Daniel Ochoa

    Daniel Ochoa

    student•
    hace 3 años

    El nombramiento de la variable edad el correcto seria myAge ya que debemos ser muy específicos en el uso del dato y si quedemos pasar la misma idea que se expresa en el video.

    Milagros Fortis

    Milagros Fortis

    student•
    hace 3 años

    Va a dar 28 porque declaramos la variable const al principio de todo y fuera del bloque

    Kevin Giovanni Cano Blanco

    Kevin Giovanni Cano Blanco

    student•
    hace 3 años

    Yo digo que da error ya que se está re declarando la variable age

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads