Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Talk - let, const & arrow functions

Talk - let, const & arrow functions

Talk para o capítulo de javascript da Concrete SP falando sobre novas funcionalidades do ES6 que melhoram a forma de trabalhar com escopo.

Marcus Ortense

August 19, 2017
Tweet

More Decks by Marcus Ortense

Other Decks in Technology

Transcript

  1. for (var i = 0; i < 10; i++) {

    console.log(i) } console.log('out of loop', i)
  2. var i = 1000 for (var i = 0; i

    < 5; i++) { console.log(i) } console.log('out of loop', i)
  3. var i = 1000 function loop() { for (var i

    = 0; i < 5; i++) { console.log(i) } } loop() console.log('out of loop', i) // 1000
  4. var i = 1000 ;(function() { for (var i =

    0; i < 5; i++) { console.log(i) } })() console.log('out of loop', i) // 1000
  5. let i = 1000 for (let i = 0; i

    < 5; i++) { console.log(i) } console.log('out of loop', i) // 1000
  6. for (let i = 0; i < 5; i++) {

    console.log(i) } console.log('out of loop', i) /* ReferenceError: i is not defined at Object.<anonymous> (loop.js:4:28) */
  7. let message = '(⌐□_□)' { let message = 'Hello JS

    chapter' console.log(message) } console.log(message) // Hello JS chapter // (⌐□_□)
  8. var a = 1 function foo() { console.log(a) var a

    = 2 console.log(a) } foo() console.log(a)
  9. var a = 1 function foo() { console.log(a) var a

    = 2 console.log(a) } foo() console.log(a) // original code
  10. var a function foo() { var a console.log(a) a =

    2 console.log(a) } a = 1 foo() console.log(a) // hoisted code
  11. let a = 1 function foo() { console.log(a) let a

    = 2 console.log(a) } foo() console.log(a) // using let
  12. let a = 1 function foo() { console.log(a) let b

    = 2 console.log(b) } foo() console.log(a) // expected
  13. var a = '(◕‿◕)' // to many code here... var

    a = '(⌐▪_▪)' console.log(a) // (⌐▪_▪)
  14. let a = '(◕‿◕)' // to many code here... let

    a = '(⌐▪_▪)' console.log(a) /* ./redeclaration.js:3 let a = '(⌐▪_▪)' ^ SyntaxError: Identifier 'a' has already been declared */
  15. “Em javascrip Tipos Primitivos string, number, boolean, null e undefined,

    são imutáveis, o que significa que, uma vez criados, eles não podem ser modificados.”
  16. const face = '(⌐▪_▪)' face = '(◕‿◕)' /* face =

    '(◕‿◕)' ^ TypeError: Assignment to constant variable. */
  17. const emotions = { angry: '(ò_ó)' } emotions.angry = '(╬

    Ò ‸ Ó)' emotions.happy = '(^_^)' console.log(emotions) // { angry: '(╬ Ò ‸ Ó), happy: '(^_^)' }
  18. const increment = function(x) { return x + 1 }

    const increment = (x) => { return x + 1 }
  19. const increment = function(x) { return x + 1 }

    const increment = (x) => { return x + 1 } const increment = (x) => x + 1
  20. const increment = function(x) { return x + 1 }

    const increment = (x) => { return x + 1 } const increment = (x) => x + 1 const increment = x => x + 1
  21. function Person() { var self = this self.age = 0

    setInterval(function() { console.log('self.age:', self.age) self.age++ }, 1000) }
  22. const scope = { face: '(*_*)' } const f =

    function() { console.log(this) } f() // window || global || undefined f.call(scope) // { face: '(*_*)' } f.apply(scope) // { face: '(*_*)' } f.bind(scope)() // { face: '(*_*)' } scope.f = f scope.f() // { face: '(*_*)', f: [Function: f] }
  23. const scope = { face: '(*_*)' } const f =

    () => console.log(this) f() // {} f.call(scope) // {} f.apply(scope) // {} f.bind(scope)() // {} scope.f = f scope.f() // {}
  24. function f() {} console.log(f.name) // f const g = function

    other() {} console.log(g.name) // other const j = function() {} console.log(j.name) // j const k = () => {} console.log(k.name) // k
  25. const x = () => () => {} const x

    = function() { return () => {} } const y = x() console.log(y.name === '') // true
  26. referências => mdn: let => mdn: const => mdn: Arrow

    functions => loopinfinito: Hoisting e escopo => loopinfinito: ECMAScript 6 Arrow Function => BrazilJS: Diferenças entre “Valor” e “Referência” => funfunfunction: var, let and const - What, why and how => funfunfunction: Arrow functions in JavaScript - What, Why and How