JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem:...
Transcript of JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem:...
![Page 1: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/1.jpg)
JavaScript in 2017Tiberiu Covaci
![Page 2: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/2.jpg)
Who am I?
Tiberiu ’Tibi’ Covaci
Software engineer, 25 years experience
CTO for DevMasters
MCT since 2004, teaching web technologies
MVP and ASP.NET Insider
Aurelia core team member
Telerik MVP & Insider
Geek
@tibor19
![Page 3: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/3.jpg)
Agenda
History
Scope, Let, Const
Destructuring
Modules
Arrow functions
Classes
String concatenation
Iterators and Generators
Promises
TypeScript
![Page 4: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/4.jpg)
History
![Page 5: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/5.jpg)
Why The Excitement?
▪ First substantial addition to JavaScript since inception
19931.0
19982.0
19993.0
20095.0
20156.0
![Page 6: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/6.jpg)
Scope, Let, Const
![Page 7: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/7.jpg)
Problem
▪ JavaScript has no block scope
![Page 8: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/8.jpg)
Solution: let
![Page 9: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/9.jpg)
Problem
▪ All variables are mutable
=4
![Page 10: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/10.jpg)
Solution: const
![Page 11: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/11.jpg)
Destructuring
![Page 12: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/12.jpg)
Destructuring
▪ The opposite of constructing is destructing
![Page 13: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/13.jpg)
Destructuring Objects
![Page 14: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/14.jpg)
Problem: Modularity & Scope
![Page 15: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/15.jpg)
Problem: Modularity & Scope
▪ Possible solutions
Common JS
Asynchronous Module Definitions
IFFE and Globals
▪ Think about how current libraries from 2014 are
designed
jQuery -> $
Angular -> angular
Lodash -> _
![Page 16: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/16.jpg)
Solution: Real Modules!
▪ Think “module” not “file”
![Page 17: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/17.jpg)
Imports
![Page 18: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/18.jpg)
Multiple Exports
![Page 19: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/19.jpg)
Parameters
![Page 20: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/20.jpg)
Problem: Default Values
▪ Default are buried in the function code
![Page 21: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/21.jpg)
Solution: Default Parameter Values
![Page 22: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/22.jpg)
Problem: Variable Number
of Arguments
▪ Syntax is not obvious to the consumer
![Page 23: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/23.jpg)
Solution: Rest Parameters
▪ Let the last parameter take the rest of the arguments
![Page 24: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/24.jpg)
Spread Operator
▪ Spread an array across the parameters
![Page 25: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/25.jpg)
Arrow functions
![Page 26: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/26.jpg)
Problem: function is an 8
character word
![Page 27: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/27.jpg)
Arrow Functions
▪ Expressive syntax
▪ Familiar to C# developers
![Page 28: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/28.jpg)
LINQish Arrows
![Page 29: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/29.jpg)
Arrow Functions Lexically
Bind this
![Page 30: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/30.jpg)
String concatenations
![Page 31: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/31.jpg)
Problem: String
Concatenation Is Unpleasant
![Page 32: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/32.jpg)
Solution: String Templates
![Page 33: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/33.jpg)
Classes
![Page 34: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/34.jpg)
Problem: Simulating OOP
![Page 35: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/35.jpg)
Solution: class Keyword
![Page 36: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/36.jpg)
Inheritance
![Page 37: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/37.jpg)
Problem: Encapsulating
Collections
![Page 38: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/38.jpg)
Solution: Iterators and Iterables
![Page 39: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/39.jpg)
for of
![Page 40: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/40.jpg)
Symbol
▪ A new type where every value is unique and
immutable
▪ Can use a symbol as a key into an object
![Page 41: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/41.jpg)
Symbol.iterator
▪ A magic method that makes an object iterable
![Page 42: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/42.jpg)
Make Your Own Iterable
![Page 43: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/43.jpg)
Generators
![Page 44: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/44.jpg)
Easy To Make Iterables
![Page 45: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/45.jpg)
Promises
![Page 46: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/46.jpg)
Problem: Async Code
http://tritarget.org/blog/2012/11/28/the-pyramid-of-doom-a-javascript-style-trap/
![Page 47: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/47.jpg)
Solution: Promises
![Page 48: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/48.jpg)
Promises Chain
![Page 49: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/49.jpg)
Decorators
▪ @ symbol followed by a function
▪ Function can modify
A class
A property
A method
A parameter
![Page 50: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/50.jpg)
TypeScript
▪ Designed by Microsoft
Anders Heilsberg
▪ Open Source
https://github.com/Microsoft/TypeScript
▪ Superset of JavaScript
Adds optional types and interfaces
![Page 51: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/51.jpg)
Type Annotations
▪ Declare the intended type of a variable
Default is “any”
boolean, number, string, Array, enum, void
![Page 52: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/52.jpg)
Types and Functions
▪ Parameters can be typed
▪ Return value can also be typed
Often can be inferred
![Page 53: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/53.jpg)
Interfaces
▪ Focus on the shape
Allows for duck typing
Can use optional properties
Can also describe functions
![Page 54: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/54.jpg)
Public and Private
▪ Public is the default
Compiler enforces private keyword
![Page 55: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/55.jpg)
Functions
▪ Can have return types, optional and default
parameters
![Page 56: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/56.jpg)
Generics
▪ Use generic types to parameterize a function or class
Generic constraints can make type programmable
![Page 57: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/57.jpg)
Declaration Files
▪ .d.ts files provide type metadata for 3rd parties
![Page 58: JavaScript in 2017 - SDD Conferencesddconf.com/brands/sdd/library/JavaScript_2017.pdf · Problem: Modularity & Scope Possible solutions Common JS Asynchronous Module Definitions IFFE](https://reader031.fdocuments.net/reader031/viewer/2022030407/5a8440d27f8b9afc5d8b812c/html5/thumbnails/58.jpg)
Summary
▪ ES2015 is a new language
Classes, arrow functions, generators, and more
▪ TypeScript adds optional type annotations
Types are structural
Type annotations useful for tooling and compile time
checks