Coleção Filhos do JavaScript | Este artigo
O içamento é apenas mais um pedaço de JavaScript que pode deixar algumas pessoas perplexas. Vamos resolver isso.
Existem basicamente dois casos de içamento: içamento variável e içamento funcional.
Elevação variável (objeto regular)
O escopo do JavaScript é baseado em função, portanto, quando você declara uma variável local usando a palavra – chave var, ela cria uma inicialização implÃcita na parte superior definindo a variável como indefinida.
var name = "John"; //local variable within global scope
surname = "Maria"; //global variable within global scope
function Fn() {
console.log(name); // John
console.log(surname); // Maria
}
function Fn2() {
//implicit top declaration: var name;
console.log(name); // undefined
console.log(surname); // Maria
var name = "Richard"; //local variable within function scope Fn2
console.log(name); // Richard
}
Fn(); Fn2();
Elevação variável (referência a uma função)
O mesmo comportamento ocorre quando a variável faz referência a uma função.
function Fn() {
console.log(myFunction()); //error as myFunction is undefined
var myFunction = function() {return 1;};
console.log(myFunction()); // 1
}
Fn();
Elevação de função
A função de içamento funciona de maneira completamente diferente. JavaScript disponibiliza todas as funções no topo, independentemente de quando são definidas.
console.log(Fn()); // 1
function Fn() {return 1;};
console.log(Fn()); // 1