Created
February 14, 2018 05:58
-
-
Save alexmasyukov/b4507f459f96ddb08a42d7cedd603c5d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Всплытие переменных | |
------------------------------------- | |
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