유효범위

변수의 수명을 의미

var vscope = 'global';
function fscope() {
	var vscope = 'local';
	alert(vscope);
}
fscope();
function a()
{
	var i = 0;
}
for (var i = 0; i < 5; i++)
{
	a();
	document.write(i);
}

function a()
{
	i = 0; // 여기서 i = 0이 계속 초기화되기때문에 무한루프에 빠지게됨!
}
for (var i = 0; i < 5; i++)
{
	a();
	document.write(i);
}

var MYAPP = {} // 빈 객체 생성
MYAPP.calculator = {
	'left' : null,
	'right' : null
}

MYAPP.coordinate = {
	'left' : null,
	'right' : null
}

MYAPP.calculator.left = 10;
MYAPP.calculator.right = 20;
function sum() {
	return MYAPP.calculator.left + MYAPP.calculator.right;
}
document.write(sum());

전역변수 MYAPP쓰기싫어..?


(function(){
	var MYAPP = {} // 빈 객체 생성
	MYAPP.calculator = {
		'left' : null,
		'right' : null
	}

	MYAPP.coordinate = {
		'left' : null,
		'right' : null
	}

	MYAPP.calculator.left = 10;
	MYAPP.calculator.right = 20;
	function sum() {
		return MYAPP.calculator.left + MYAPP.calculator.right;
	}
	document.write(sum());
}())

익명함수로 전역변수 없앨수있음ㅋㅋ

유효범위의 대상

자바스크립트는 함수에 대한 유효범위만을 제공해. 만ㅎ은언어들은 대체로 블록단위로 함

for (int i = 0; i < 10; i++)
{
	String name = "egoing";
}
system.out.println(name);
==> 이러면 에러임 블록단위에서 이미 끝난거기때문에
for (var i = 0; i < 1; i++)
{
	var name = 'coding everybody';
}
alert(name);
==> 자바스크립트에서 유효범위는 함수와 관련되어있기때문에 이게 가능함!

정적유효범위

자바스크립트는 함수가 선언된 시점에서 유효범위를 갖는다.

var i = 5;
function a() {
	var i = 10;
	b();

}

function b() {
	document.write(i); // b라는 함수안에 지역변수 이름 i가 있나? 없네. b를 호출하는 a함수의 i를 찾으러갈까 전역변수의 i를 찾으러갈까?
// 답은 전역변수 i가 사용되어 5가 찍히게됨. 다시말해, 사용될때가 아니고 정의될때의 전역변수가 사용된다는거야. 이런걸 정적 유효범위라고 해.
}
a();

b라는 함수안에 지역변수 이름 i가 있나? 없네. b를 호출하는 a함수의 i를 찾으러갈까 전역변수의 i를 찾으러갈까? // 답은 전역변수 i가 사용되어 5가 찍히게됨. 다시말해, 사용될때가 아니고 정의될때의 전역변수가 사용된다는거야. 이런걸 정적 유효범위라고 해. 렉시컬.