728x90
반응형
/**
* Scope
*/
var numberOne = 20;
function levelOne(){
console.log(numberOne);
}
// levelOne();
function levelOne(){
var numberOne = 40;
console.log(numberOne);
}
// levelOne();
console.log(numberOne); // 20
function levelOne(){
var numberOne = 40;
function levelTwo(){
var numberTwo = 99;
console.log(`levelTwo numberTwo : ${numberTwo}`); // 99
console.log(`levelTwo numberOne : ${numberOne}`); // 40
}
levelTwo();
console.log(`levelOne numberOne : ${numberOne}`); // 40
}
levelOne();
console.log(numberOne); // 20
// console.log(numberTwo);
/**
* JS -> Lexical Scope
*
* 선언된 위치가 상위 스코프를 정한다.
*
* Dynamic Scope
*
* 실행한 위치가 상위 스코프를 정한다.
*/
var numberThree = 3;
function functionOne(){
var numberThree = 100;
functionTwo();
}
function functionTwo(){
console.log(numberThree); // 3 , functionOne 안에서는 100이지만 functionTwo로 오는 순간 전역변수인 3이다(var이기 떄문)
}
functionOne();
var i = 999;
for(var i = 0; i < 10; i++){
console.log(i);
}
console.log(`i in global scope : ${i}`) // 10
i = 999;
// block level scope
for(let i = 0; i < 10; i++){
console.log(i);
}
console.log(`i in global scope : ${i}`); // 999
/**
* var 키워드는 함수 레벨 스코프만 만들어낸다.
*
* let, const 키워드는 함수 레벨 스코프와 블록 레벨 스코프를 만들어낸다.
*/
728x90
반응형
'코드팩토리 JS' 카테고리의 다른 글
| 25. execution context (0) | 2025.12.27 |
|---|---|
| 24. this (0) | 2025.12.27 |
| 22. prototype chain (0) | 2025.12.27 |
| 21. Immutable Object (0) | 2025.12.26 |
| 20. property attribute (1) | 2025.12.26 |