2019.02.03 javascript 스코프
Scope
Var greeting = “Hello”
Function greetSomeone(){
var firstName = “josh”;
return greeting + “ “ + firstName;
}
greetsomeone(); // —> Hello josh
firstName; // —> ReferenceError (firstName is not defined ——> 선언된 적이 없다)
Local scope에서 Global scope는 찾을 수 있으나
Global scope에서 Local scope을 찾을 수 없다.
껍질 이라고 생각하자. 안쪽 껍질에서는 바깥 쪽 껍질을
찾을 수 있으나, 바깥 쪽 껍질에서는 안쪽 껍질은 찾을 수 없다.
javascript에서 Scope는 함수가 선언되는 동시에 자신만의 scope를 가진다.
Lexical scope vs Dynamic scope
Scope의 룰
Local Scope(지역 변수) vs Global Scope(전역 변수)
Local Scope - 함수 안에서 적용
Global Scope는 어디에서든 접근 가능
하위 스코프는 상위 스코프에서 접근 불가
지역변수는 함수 내에서 전역변수보다 높은 우선순위(자바스크립트는 기본적으로 function level의 scoping 규칙을 따름
debugger를 통해 디버거 확인 가능
Ex)
var name = “Richard”;
function showName(){
var name = “jack”;
console.log(name);
}
console.log(name); // Richard
showName(); // jack
console.log(name); // Richard
Ex)
Var name = “Richard”;
if(name){
name = “Jack”;
console.log(name); // Jack
}
console.log(name); //Jack
Ex)
for(var I=0; I<5; I ++){
console.log(I); // I = 0부터 조건 확인하고 콘솔 배출하고 ++해준다.
}
for(let I = 0; I<5; I++){
console.log(I)
}
Console.log(I) // ReferenceError
var와 let, const keyword
let은 블록 단위라서 블록을 벗어나면 접근 불가능
let과 const는 var로 정의된 변수를 재정의할 수 없음
const는 한번 값을 설정해 놓으면 바꿀 수 없음
실제로는 let과 const가 안정하기 때문에 더 많이 쓰는 추세
전역 변수와 window 객체
(선언 없이 초기화된 변수는 전역 변수)
함수 외부에서 선언된 변수는 모두 전역 변수
전역변수는 모두 window에 연결되어 있다.
키워드 없이 변수 선언을 하면 전부 전역변수에 붙게 된다. 따라서
항상 변수 선언을 해줘야 한다. 가급적 전역 범위의 번수를 많이 설정하지 말자.
Hoisting (var만 해당)
변수 선언은 범위에 따라 선언과 할당으로 분리됨
Javascript 엔진이 내부적으로 변수 선언을 scope의 상단으로 끌어 올린다.
할당은 제 자리에 있음
Ex)
a = 2;
Var a;
console.log(a); //2
함수 선언식은 항상 상단으로 // 통째로
Var fun = function(){}
함수 표현식은 할당된 변수만 상단으로
Function fun(){}
'JAVASCRIPT' 카테고리의 다른 글
javascript 중괄호 , 대괄호, 소괄호 사용 정리 (0) | 2020.03.19 |
---|---|
javascript 05. ajax를 활용하여 댓글 기능 구현하기 (0) | 2020.01.16 |
javascript 04. jquery & ajax 기본 문법 (0) | 2020.01.16 |
javascript 02. 콜백함수, 객체지향 (0) | 2020.01.16 |
javascript 01. 변수, 조건문, 반복문, 함수, 객체, 배열 (0) | 2020.01.16 |