33 Conceptos que todo desarrollador de JavaScript debería saber
## Introducción
Este repositorio fue creado con la intención de ayudar a los desarrolladores a dominar sus conceptos en JavaScript. No es un requisito, sino una guía para futuros estudios. Está basado en un artículo escrito por [Stephen Curtis](https://twitter.com/stephenthecurt) y puede leerlo [aquí](https://medium.com/@stephenthecurt/33-fundamentals-every-javascript-developer-should-know-13dd720a90d1).
## Comunidad
Siéntase libre de enviar un PR agregando un enlace a sus propios resúmenes o comentarios. Si desea traducir el repositorio a su idioma nativo, no dude en hacerlo.
Todas las traducciones para este repo serán enumeradas abajo:
- [Albanés](https://github.com/eldrinf/33-js-concepts-albanian.git) — Eldrin Ereqi
- [Árabe](https://github.com/amrsekilly/33-js-concepts) — Amr Elsekilly
- [Chino](https://github.com/stephentian/33-js-concepts) — Re Tian
- [Portugués](https://github.com/tiagoboeing/33-js-concepts) — Tiago Boeing
- [Koreano](https://github.com/yjs03057/33-js-concepts.git) — Suin Lee
- [Turco](https://github.com/ilker0/33-js-concepts) — İlker Demir
- [Ruso](https://github.com/gumennii/33-js-concepts) — Mihail Gumennii
- [Vietnamita](https://github.com/nguyentranchung/33-js-concepts) — Nguyễn Trần Chung
- [Polaco](https://github.com/lip3k/33-js-concepts) — Dawid Lipinski
- [Persa](https://github.com/majidalavizadeh/33-js-concepts) — Majid Alavizadeh
- [Indonés](https://github.com/rijdz/33-js-concepts) — Rijdzuan Sampoerna
- [Inglés](https://github.com/leonardomso/33-js-concepts) — Leonardo Maldonado
- [Francés](https://github.com/robinmetral/33-concepts-js) — Robin Métral
- [Hindú](https://github.com/vikaschauhan/33-js-concepts) — Vikas Chauhan
- [Griego](https://github.com/DimitrisZx/33-js-concepts) — Dimitris Zarachanis
- [Japonés](https://github.com/oimo23/33-js-concepts) — oimo23
- [Alemán](https://github.com/burhannn/33-js-concepts) — burhannn
- [Ucraniano](https://github.com/AndrewSavetchuk/33-js-concepts-ukrainian-translation) — Andrew Savetchuk
- [Cingalés](https://github.com/ududsha/33-js-concepts) — Udaya Shamendra
- [Italiano](https://github.com/Donearm/33-js-concepts) — Gianluca Fiore
---
## Tabla de contenido
1. **[Pila de llamadas](#1-pila-de-llamadas)**
2. **[Tipos primitivos](#2-tipos-primitivos)**
3. **[Tipos de valor y tipos de referencia](#3-tipos-de-valores-y-tipos-de-referencias)**
4. **[Implícito, Explícito, Nominal, Estructuración y Escritura de pato](#4-implícito-explícito-nominal-estructuración-y-escritura-de-pato)**
5. **[== vs === vs typeof](#5--vs--vs-typeof)**
6. **[Alcance de la función, Ámbito de bloque y alcance léxico](#6-alcance-de-la-función-ámbito-de-bloque-y-alcance-léxico)**
7. **[Expression vs Statement](#7-expression-vs-statement)**
8. **[IIFE, módulos y espacios de nombres](#8-iife-módulos-y-espacios-de-nombres)**
9. **[Message Queue y Event Loop](#9-message-queue-y-event-loop)**
10. **[setTimeout, setInterval y requestAnimationFrame](#10-settimeout-setinterval-y-requestanimationframe)**
11. **[Motores de JavaScript](#11-motores-de-JavaScript)**
12. **[Bitwise Operators, Type Arrays y Array Buffers](#12-bitwise-operators-type-arrays-y-array-buffers)**
13. **[DOM y Layout Trees](#13-dom-y-layout-trees)**
14. **[Factories y Classes](#14-factories-y-classes)**
15. **[this, call, apply y bind](#15-this-call-apply-y-bind)**
16. **[new, Constructor, instanceof y Instances](#16-new-constructor-instanceof-y-instances)**
17. **[Prototype Inheritance y Prototype Chain](#17-prototype-inheritance-y-prototype-chain)**
18. **[Object.create y Object.assign](#18-objectcreate-y-objectassign)**
19. **[map, reduce, filter](#19-map-reduce-filter)**
20. **[Funciones puras, efectos secundarios y mutación de estado](#20-Funciones-puras-efectos-secundarios-y-mutación-de-estado)**
21. **[Closures](#21-closures)**
22. **[High Order Functions](#22-high-order-functions)**
23. **[Recursion](#23-recursion)**
24. **[Collections y Generators](#24-collections-y-generators)**
25. **[Promesas](#25-promesas)**
26. **[async/await](#26-asyncawait)**
27. **[Estructuras de datos](#27-estructuras-de-datos)**
28. **[Expensive Operation y Big O Notation](#28-expensive-operation-y-big-o-notation)**
29. **[Algoritmos](#29-algoritmos)**
30. **[Herencia, polimorfismo y reutilización de código](#30-herencia-polimorfismo-y-reutilización-de-código)**
31. **[Patrones de diseño](#31-patrones-de-diseño)**
32. **[Partial Applications, Currying, Compose y Pipe](#32-partial-applications-currying-compose-y-pipe)**
33. **[Código limpio](#33-código-limpio)**
---
## 1. Pila de llamadas
### Artículos (Inglés)
* [Understanding Javascript Call Stack, Event Loops — Gaurav Pandvia](https://medium.com/@gaurav.pandvia/understanding-javascript-function-executions-tasks-event-loop-call-stack-more-part-1-5683dea1f5ec)
* [Understanding the JavaScript Call Stack — Charles Freeborn](https://medium.freecodecamp.org/understanding-the-javascript-call-stack-861e41ae61d4)
* [Javascript: What Is The Execution Context? What Is The Call Stack? — Valentino Gagliardi](https://www.valentinog.com/blog/js-execution-context-call-stack/)
* [What is the JS Event Loop and Call Stack? — Jess Telford](https://gist.github.com/jesstelford/9a35d20a2aa044df8bf241e00d7bc2d0)
* [Call Stack — MDN](https://developer.mozilla.org/en-US/docs/Glossary/Call_stack)
* [Pila de llamadas — MDN(ES)](https://developer.mozilla.org/es/docs/Glossary/Call_stack)
* [Understanding Execution Context and Execution Stack in Javascript — Sukhjinder Arora](https://blog.bitsrc.io/understanding-execution-context-and-execution-stack-in-javascript-1c9ea8642dd0)
* [How JavaScript Works: An Overview of the Engine, the Runtime, and the Call Stack — Alexander Zlatkov](https://blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf)
* [The Ultimate Guide to Execution Contexts, Hoisting, Scopes, and Closures in JavaScript — Tyler McGinnis](https://tylermcginnis.com/ultimate-guide-to-execution-contexts-hoisting-scopes-and-closures-in-javascript/)
### Videos
* [Javascript: the Call Stack explained — Coding Blocks India](https://www.youtube.com/watch?v=w6QGEiQceOM)
* [The JS Call Stack Explained In 9 Minutes — Colt Steele](https://www.youtube.com/watch?v=W8AeMrVtFLY)
* [JavaScript Execution Stack — Codecademy](https://www.youtube.com/watch?v=jT0USJeNFEA)
* [What is the Call Stack? — Eric Traub](https://www.youtube.com/watch?v=w7QWQlkLY_s)
* [The Call Stack — Kevin Drumm](https://www.youtube.com/watch?v=Q2sFmqvpBe0)
* [Understanding JavaScript Execution — Codesmith](https://www.youtube.com/watch?v=Z6a1cLyq7Ac&list=PLWrQZnG8l0E4kd1T_nyuVoxQUaYEWFgcD)
* [Call Stack & Event Loop — movies com](https://www.youtube.com/watch?v=mk0lu9MKBto)
* [The Ultimate Guide to Execution Contexts, Hoisting, Scopes, and Closures in JavaScript — Tyler McGinnis](https://www.youtube.com/watch?v=Nt-qa_LlUH0)
* [La PILA DE EJECUCIÓN (Call Stack) de JAVASCRIPT | JS en ESPAÑOL](https://youtu.be/ygA5U7Wgsg8)
**[⬆ volver arriba](#Tabla-de-contenido)**
---
## 2. Tipos primitivos
### Artículos (Inglés)
* [How numbers are encoded in JavaScript — Dr. Axel Rauschmayer](http://2ality.com/2012/04/number-encoding.html)
* [What You Need to Know About JavaScript Number Type — Max Wizard K](https://medium.com/dailyjs/javascripts-number-type-8d59199db1b6)
* [What Every JavaScript Developer Should Know About Floating Point Numbers — Chewxy](https://blog.chewxy.com/2014/02/24/what-every-javascript-developer-should-know-about-floating-point-numbers/)
* [The Secret Life of JavaScript Primitives — Angus Croll](https://javascriptweblog.wordpress.com/2010/09/27/the-secret-life-of-javascript-primitives/)
* [Primitive Types — Flow](https://flow.org/en/docs/types/primitives/)
* [(Not) Everything in JavaScript is an Object - Daniel Li](http://blog.brew.com.hk/not-everything-in-javascript-is-an-object/)
* [JavaScript data types and data structures - MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Primitive_values)
* [Tipos de datos y estructuras en JavaScript - MDN(ES)](https://developer.mozilla.org/es/docs/Web/JavaScript/Data_structures#Primitive_values)
### Videos
* [JavaScript Reference vs Primitive Types — Academind](https://www.youtube.com/watch?v=9ooYYRLdg_g)
* [JavaScript Primitive Types — Simon Sez IT](https://www.youtube.com/watch?v=HsbWQsSCE5Y)
* [Javascript Primitive and Reference Types — Baljeet Singh](https://www.youtube.com/watch?v=F7YbhKbpFic)
* [Value Types and Reference Types in JavaScript — Programming with Mosh](https://www.youtube.com/watch?v=e-_mDyqm2oU)
* [JavaScript Primitive Data Types — Avelx](https://www.youtube.com/watch?v=qw3j0A3DIzQ)
* [Everything you never wanted to know about JavaScript numbers — Bartek Szopka](https://www.youtube.com/watch?v=MqHDDtVYJRI)
* [TIPOS DE DATOS PRIMITIVOS en JAVASCRIPT | JS en ESPAÑOL](https://youtu.be/cC65D2q5f8I)
**[⬆ volver arriba](#Tabla-de-contenido)**
---
## 3. Tipos de valores y tipos de referencias
### Artículos (Inglés)
* [Explaining Value vs. Reference in Javascript — Arnav Aggarwal](https://codeburst.io/explaining-value-vs-reference-in-javascript-647a975e12a0)
* [Understand Value and Reference Types in JavaScript — Zsolt Nagy](https://www.zsoltnagy.eu/understand-value-and-reference-types-in-javascript/)
* [Primitive Types & Reference Types in JavaScript — Bran van der Meer](https://gist.github.com/branneman/7fb06d8a74d7e6d4cbcf75c50fec599c)
* [Value Types, Reference Types and Scope in JavaScript — Ben Aston](https://medium.com/@benastontweet/lesson-1b-javascript-fundamentals-380f601ba851)
* [Back to roots: JavaScript Value vs Reference — Miro Koczka](https://medium.com/dailyjs/back-to-roots-javascript-value-vs-reference-8fb69d587a18)
* [Grasp “By Value” and “By Reference” in JavaScript — Léna Faure](https://hackernoon.com/grasp-by-value-and-by-reference-in-javascript-7ed75efa1293)
* [JavaScript Reference and Copy Variables — Vítor Capretz](https://hackernoon.com/javascript-reference-and-copy-variables-b0103074fdf0)
* [JavaScript Primitive vs Reference Values](http://www.javascripttutorial.net/javascript-primitive-vs-reference-values/)
### Videos
* [Javascript Pass by Value vs Pass by Reference — techsith](https://www.youtube.com/watch?v=E-dAnFdq8k8)
* [JavaScript Value vs Reference Types — Programming with Mosh](https://www.youtube.com/watch?v=fD0t_DKREbE)
* [VALORES vs REFERENCIAS en JAVASCRIPT | JS en ESPAÑOL](https://youtu.be/AvkyOrWkuQc)
**[⬆ volver arriba](#Tabla-de-contenido)**
---
## 4. Implícito, Explícito, Nominal, Estructuración y Escritura de pato
### Artículos (Inglés)
* [What you need to know about Javascript's Implicit Coercion — Promise Tochi](https://dev.to/promhize/what-you-need-to-know-about-javascripts-implicit-coercion-e23)
* [JavaScript Type Coercion Explained — Alexey Samoshkin](https://medium.freecodecamp.org/js-type-coercion-explained-27ba3d9a2839)
* [Javascript Coercion Explained — Ben Garrison](https://hackernoon.com/javascript-coercion-explained-545c895213d3)
* [What exactly is Type Coercion in Javascript? - Stack Overflow](https://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript)
* [You Don't Know JS: Types & Grammar [Book] — Kyle Simpson](https://www.oreilly.com/library/view/you-dont-know/9781491905159/ch04.html)
* [(Not) Everything in JavaScript is an Object - Daniel Li](http://blog.brew.com.hk/not-ev