Skip to content

Instantly share code, notes, and snippets.

@alexmasyukov
Created February 14, 2018 05:58
Show Gist options
  • Save alexmasyukov/b4507f459f96ddb08a42d7cedd603c5d to your computer and use it in GitHub Desktop.
Save alexmasyukov/b4507f459f96ddb08a42d7cedd603c5d to your computer and use it in GitHub Desktop.
Всплытие переменных
-------------------------------------
var x = 'внешняя';
function inner(){
console.log(x);
var x = 'inner';
}
inner(); // undefined
----
Как видит интерпритатор
интерпритатор сначала делает инициализацию найденных переменных, понимая ее вверх
----
var x = 'внешняя';
function inner(){
var x; // ВСЕ ПЕРЕМЕННЫЕ ПОНИМАЮТСЯ !!!
console.log(x);
x = 'inner';
}
inner(); // undefined
var a = 1;
var b = 2;
будет преобразовано интерпритатором
var a;
var b;
a = 1;
b = 2;
Всплытие функции
------------------------
outer(); //undefined
var x = 'external';
function outer(){
console.log(x);
}
будет преобразовано интерпритатором
var x;
function outer(){
console.log(x);
}
outer();
x = 'external';
Функциональные выражения не всплывают!!!
--------------------------------------
outer(); // Uncaught TypeError: outer is not a function
var x = 'external';
var outer = function(){
console.log(x);
}
будет преобразовано интерпритатором
var x;
var outer;
outer();
x = 'external';
outer = function(){
console.log(x);
}
const и let не всплавают !
------------------------------
let x = 'external';
const y = 'external 2';
if (true) {
console.log(x); //x is not defined
console.log(y); //y is not defined
let x = 'inner';
}
----
babel преобразует в
----
'use strict';
var x = 'external';
var y = 'external 2';
if (true) {
console.log(_x); //x is not defined
console.log(_y); //y is not defined
var _x = 'inner';
var _y = 'inner 2';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment