var name = 'Kai';

init();

function init() {
    var name = "Steve";

    function displayName() {  
      console.log(name);      
    }

    displayName();
}


코드를 로드하기 전 

var name;
var init = function init() {
  var name = "Steve";

  function displayName() {  
    console.log(name); 
  }

  displayName();
}

name = 'Kai';

코드를 로드하여
전역 Execution Context를 생성

범위의 모든 선언을 참고(Hoisting)

변수의 의미가 통하는 곳(Lexical Scope)

var name;
var init = function init() {
  var name;
  var displayName = function displayName() {  
    console.log(name); 
  }
  
  name = "Steve";

  displayName();
}

name = 'Kai';

init을 호출하여
init Execution Context를 생성

범위의 모든 선언을 참고(Hoisting)

변수의 의미가 통하는 곳(Lexical Scope)

var name;
var init = function init() {
  var name;
  var displayName = function displayName() {  
    console.log(name); 
  }
  
  name = "Steve";

  displayName();
}

name = 'Kai';

name 변수는
 Execution Context마다 맥락이 달랐다.

범위의 모든 선언을 참고(Hoisting)

변수의 의미가 통하는 곳(Lexical Scope)

Made with Slides.com