Learning curve in Javascript

by @santospatrick
-
5 years of Front-End
-
Graphic Design Degree
-
Angular, Vue and React developer
-
Currently working at Camera Hot

@santospatrick
https://github.com/MBaloochestani/Web-Developer-roadmap









Variables and hoisting
var meetup = 'Curitiba.js'
function log(){
console.log(meetup);
}
if (true) {
var meetupIsCool = true;
}
log();
// Output: Curitiba.js
console.log(meetupIsCool);
// Output: true
"var"
var meetup = 'Curitiba.js';
var meetupIsCool;
function log(){
console.log(meetup);
}
if (true) {
meetupIsCool = true;
}
log();
// Output: Curitiba.js
console.log(meetupIsCool);
// Output: true
Variables and hoisting
let meetup = 'Curitiba.js'
function log(){
console.log(meetup);
}
if (true) {
let meetupIsCool = true;
}
log();
// Output: Curitiba.js
console.log(meetupIsCool);
// Output: ReferenceError: meetupIsCool is not defined;
"let"
Variables and hoisting
const meetupIsCool = true;
const meetup = {
local: 'Jupter'
}
meetupIsCool = false
// SyntaxError: Identifier 'meetupIsCool' has already been declared
meetup.local = 'Earth'
console.log(meetup)
// {local: 'Earth'}
"const"
Variables and hoisting
"var" = function scoped
"let" = block scoped
"const" = block scoped, cant be re-declared (can be updated if it is an object)
Event Delegation & Bubbling
<button class="card">
<img src="path/to/img.png"/>
<div class="content">
<button class="close">X</button>
<p>Some text for example</p>
</div>
</button>
Event Delegation & Bubbling
<button class="card">
<img src="path/to/img.png"/>
<div class="content">
<button class="close">X</button>
<p>Some text for example</p>
</div>
</button>
const card = document.querySelector('.card');
const close = document.querySelector('.close');
card.addEventListener('click', () => {
console.log('clicked at card!')
});
close.addEventListener('click', () => {
console.log('clicked at close button!')
});
Event Delegation & Bubbling
<button class="card">
<img src="path/to/img.png"/>
<div class="content">
<button class="close">X</button>
<p>Some text for example</p>
</div>
</button>
const card = document.querySelector('.card');
const close = document.querySelector('.close');
card.addEventListener('click', () => {
console.log('clicked at card!')
});
close.addEventListener('click', event => {
event.stopPropagation();
console.log('clicked at close button!')
});
target vs currentTarget
<button class="btn">
<img src="path/to/star.svg"/>
<span>some text</span>
</button>
SOME TEXT
target vs currentTarget
<button class="btn">
<img src="path/to/star.svg"/>
<span>some text</span>
</button>
const btn = document.querySelector('.btn');
btn.addEventListener('click', event => {
console.log('target: ', event.target);
console.log('currentTarget: ', event.currentTarget);
});
// target: <img src="star.svg"/> or <span></span>
// currentTarget: <button class="card">...</button>
Function declaration & expression
meetupDeclaration()
meetupExpression()
function meetupDeclaration(){
console.log('function declaration')
}
const meetupExpression = function(){
console.log('function expression')
}
// ReferenceError: meetupExpression is not defined
Arrow functions
const meetup = {
local: 'Jupter',
setLocal: function(newLocal) {
const updateLocalAndUppercase = function(local) {
this.local = local.toUpperCase();
}
updateLocalAndUppercase(newLocal)
}
}
meetup.setLocal('Earth');
console.log(meetup.local);
Jupter
Earth
undefined
Arrow functions
const meetup = {
local: 'Jupter',
setLocal: function(newLocal) {
const updateLocalAndUppercase = (local) => {
this.local = local.toUpperCase();
}
updateLocalAndUppercase(newLocal)
}
}
meetup.setLocal('Earth');
console.log(meetup.local);
JUPTER
EARTH
UNDEFINED
Arrow functions (React)
class App extends React.Component {
state = {
focused: false
};
setFocused() {
this.setState({ focused: true });
}
render() {
...
}
}
class App extends React.Component {
state = {
focused: false
};
constructor(props) {
super(props);
this.setFocused = this.setFocused.bind(this);
}
setFocused() {
this.setState({ focused: true });
}
render() {
...
}
}
class App extends React.Component {
state = {
focused: false
};
setFocused = () => {
this.setState({ focused: true });
}
render() {
...
}
}
Arrow functions (Vue.js)
export default {
data() {
return {
inputIsFocused: false
};
},
mounted() {
const input = document.querySelector("input");
input.addEventListener("focus", function() {
this.inputIsFocused = true;
});
}
}
export default {
data() {
return {
inputIsFocused: false
};
},
mounted() {
const input = document.querySelector("input");
const self = this;
input.addEventListener("focus", function() {
self.inputIsFocused = true;
});
}
}
export default {
data() {
return {
inputIsFocused: false
};
},
mounted() {
const input = document.querySelector("input");
input.addEventListener("focus", () => {
this.inputIsFocused = true;
});
}
}
setTimeout()
console.log(1)
console.log(2)
console.log(3)
// 1, 2, 3
setTimeout(function(){
console.log(1);
}, 0);
console.log(2);
console.log(3);
1, 2, 3
2, 3, 1
3, 2, 1
undefined
setTimeout()
setTimeout(function(){
console.log(1);
}, 1000);
setTimeout(function(){
console.log(2);
}, 500);
setTimeout(function(){
console.log(3);
}, 250);
1, 2, 3
2, 3, 1
3, 2, 1
undefined
Cloning arrays & objects
var arr = [1,2,3];
var arr2 = arr;
arr.push(4)
console.log(arr2)
1, 2, 3
1, 2, 3, 4
undefined
var arr = [1,2,3];
var arr2 = arr.concat();
// or
var arr2 = [...arr];
arr.push(4)
console.log(arr2)
// 1,2,3
Cloning arrays & objects
var obj = { local: 'Jupter' };
var obj2 = obj;
obj.local = 'Earth';
console.log(obj2);
Jupter
Earth
undefined
var obj = { local: 'Jupter' };
var obj2 = Object.assign({}, obj);
// or
var obj2 = {...obj};
obj.local = 'Earth';
console.log(obj2);
// { local: 'Jupter' }
Learning resources










Thank you! Questions?

Github: @santospatrick
Gmail: patrickspteixeira
Curva de aprendizado com Javascript
By Patrick Santos
Curva de aprendizado com Javascript
- 320