function book(){
var point = 123;
function get(){
log(point);
};
get();
};
book();
// 123
엔진이 funciton book(){}을 만나면
function 오브젝트를 생성하고
스코프를 설정
JS의 스코프 설정 메커니즘
마지막 줄에서 book() 함수를 호출
엔진 컨트롤이 book 함수 안으로 이동
function get(){}을 만나게 되며 function 오브젝트를 생성함
스코프를 설정
get() 함수 호출
var value = 100;
function book(){
var point = 200;
return value;
};
book();
// <script src-"./abc.js">
var value = 100;
function book(){
return value + 50;
};
// <script src="./def.js">
log(value);
log(book());
// 100
// 150
<script>
에 작성된 모든 코드글로벌 오브젝트가 글로벌 스코프
오브젝트는 개발자 관점으로
스코프는
글로벌 스코프는 최상위 스코프
var value = 100;
function book(){
return value;
};
book();
function book(){코드}에서
var value = 100;
글로벌 오브젝트에 설정된다는 것은 오브젝트 관점
스코프와 식별자 해결 관점은
book();
오브젝트를 작성하지 않으면
즉, 글로벌 스코프에서 book을 찾아 호출
정적(렉시컬) 바인딩
JS는 대부분 정적 바인딩
동적(다이나믹 바인딩)
바인딩 시점이 중요한 이유
function 오브젝트 생성 시점에 스코프 결정
함수 안의 모든 함수의 스코프가 같음
function book(){
var point = 100;
function add() {point += 200;};
function get() {return point;};
};
function book(){
var point = 100;
function add(param){
point += param;
};
var get = function(){
return point;
};
add(200);
log(get());
};
book();
// 300
마지막 줄에서 book() 함수 호출
function add(param){...}
var point = 100;
var get = function(){...}
바인딩으로 함수와 변수의 식별자로 해결됨
========= 코드 실행 ===========
var point = 100;
var get = function(){...}
========= add() 함수 호출 ==========
add(200) 함수를 호출
point += param;
========== get() 함수 호출 ==========
get() 함수 호출
return point;
코드를 실행할 때마다 바인딩
with 문
eval() 함수