// 전역변수와 지역변수가 이름(식별자)이
// 같은 경우 가까이에 있는 식별자가
// 먼저 해석(resolution)됨
let gValue1 = 100;
const f1 = function()
{
let gValue1 = 200;
console.log('f1() ' + gValue1);
}
f1();
// 전역영역에 올린 변수들은
// 1. 어디에서나 접근가능.
// 2. let, var, const 차이가 없음.
// 따라서 스코프는 지역영역에서
// 해석하는 방식을 중점적으로 학습!
let gValue1 = 100;
const gValue2 = 100;
var gValue3 = 100;
const f1 = function()
{
console.log('f1() ' + gValue1);
console.log('f1() ' + gValue2);
console.log('f1() ' + gValue3);
}
console.log(gValue1);
console.log(gValue2);
console.log(gValue3);
// ES5의 함수는 호이스팅의 대상이다.
f1();
// ERROR (ES6방식은 호이스팅의 대상이 아님)
//f2();
function f1()
{
var i = 10;
console.log('ES5-f1()' + i);
}
const f2 = function()
{
console.log('ES6-f2()');
}
// 지역 변수내에서 var와 let(const)은 차이가 있음
// let, const : 블록 레벨 스코프.
const f1 = function()
{
for (let i = 0; i < 5; i++)
{
console.log(i);
}
// ERROR 발생, let 이나 const는 블록 레벨 스코프 이다.
// console.log(i);
}
// var : 함수 레벨 스코프.
const f2 = function()
{
for (var i = 0; i < 5; i++)
{
console.log(i);
}
console.log(i);
}
f1();
// 스코프 체이닝
let a = 10;
const f1 = function()
{
let a = 20
const f2 = function()
{
let a = 30
console.log(a);
}
}
f1();