Byeonguk Kim

안녕하세요. 29살의 조금은 늦은 나이로 새롭게 개발자로 시작하는 신입 개발자입니다. 포트폴리오 [https://deaguowl.github.io]

javascript 03. SCOPE

03 Feb 2019 » Javascript

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(전역 변수)

  1. Local Scope - 함수 안에서 적용

  2. Global Scope는 어디에서든 접근 가능

  3. 하위 스코프는 상위 스코프에서 접근 불가

  4. 지역변수는 함수 내에서 전역변수보다 높은 우선순위(자바스크립트는 기본적으로 function level의 scoping 규칙을 따름

  5. 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

  1. let은 블록 단위라서 블록을 벗어나면 접근 불가능

  2. let과 const는 var로 정의된 변수를 재정의할 수 없음

  3. const는 한번 값을 설정해 놓으면 바꿀 수 없음

  4. 실제로는 let과 const가 안정하기 때문에 더 많이 쓰는 추세

전역 변수와 window 객체

(선언 없이 초기화된 변수는 전역 변수)

함수 외부에서 선언된 변수는 모두 전역 변수
전역변수는 모두 window에 연결되어 있다.

키워드 없이 변수 선언을 하면 전부 전역변수에 붙게 된다. 따라서 항상 변수 선언을 해줘야 한다. 가급적 전역 범위의 번수를 많이 설정하지 말자.

Hoisting (var만 해당)

변수 선언은 범위에 따라 선언과 할당으로 분리됨

Javascript 엔진이 내부적으로 변수 선언을 scope의 상단으로 끌어 올린다.

할당은 제 자리에 있음

Ex)

a = 2;

Var a;

console.log(a); //2

함수 선언식은 항상 상단으로 // 통째로

Var fun = function(){}

함수 표현식은 할당된 변수만 상단으로

Function fun(){}