sub add {
$balance += shift;
}
sub transaction_a {
local $balance = 0;
say add(1);
transaction_b();
say add(100);
}
sub transaction_b {
local $balance = 5;
say add(10);
}
다이나믹 스코프(동적 스코프) : 함수가 실행되는 시점에 상위 스코프가 결정이 된다. transaction_a 함수가 실행되면 add(1)이 실행되는데, add에는 balance 가 없기 때문에 상위 스코프인 transaction_a 의 balance를 가져오게 된다. transaction_b 함수가 실행되면 add(10)의 상위 스코프는 transaction_b 가 된다.
function outer(){
let a= 10;
function inner(){
console.log(a);
}
return inner()
}
자바스크립트는 정적 스코프를 사용한다.
렉시컬 스코프(정적 스코프) : 코드가 작성되는 그대로 상위 스코프가 결정된다. inner 함수의 상위 스코프는 outer 이다. 작성된(정의된) 그대로 스코프가 결정된다.