자바스크립트는 함수 유효범위를 가지고 있다.

변수는 이 변수가 정의된 함수 안에서 보일 뿐 아니라 이 함수 않에 중첩된 함수 안에서도 보인다.


function test(){

var i = 0;

if (1=1){

var j=0;

for(var k=0; k<10;k++){

colsone.log(k);//0~9출력

}

console.log(k);//10출력

}

concole.log(g); //0 출력

}


자바스크립트에서 함수의 유효범위는 이 함수안에서 선언된 모든 변수가 함수전체에 걸쳐 유효하다는 의미이다.


이런 특징을 끌어올림이라 한다.


var scope = "global";

function f(){

console.log(scope);    //"global"이 아니라 "undfined"를 출력

var scope = "local";    //변수를 여기서 초기화 하지만 전역적으로 정의된다.

console.log(scope);    //"local"을 출력한다.

}


지역변수를 선언하는 var문이 아직 실행되지 않았기 때문에 여러분은 이 함수의 1행이 "global"을 출력할거라고 착각할 수 있다.

하지만, 함수 유효범위 규칙 때문에 실제로는 그렇지 않다. 지역 변수는 함수 전체에 걸쳐서 정의 된다. 즉, 같은 이름의 전역 변수는

함수 전체에서  이 지역  변수에 의해 감춰진다. 지역변수가 함수 전체에 걸쳐 정의되었다라도  var문이 실행되고 나서야 실제로 

초기화 된다. 그리고 변수선언은 함수 맨 꼭때기로 끌어올려지고, 이시점에 변수 초기화가 이루어진다.

'웹 개발 > Javascript 등' 카테고리의 다른 글

변수 (선언되지 않은 변수 사용)  (0) 2015.03.18

선언하지 않은 변수를 읽으려 한다면 자바스크립트는 에러를 발생시킨다.

ECMAscript5 엄격한 모드에서도 선언하지 않은 변수에 값을 넣으려 할 때 에러가 발생한다.

하지만, 역사적으로 표준 모드에서 선언하지 않은 변수에 값을 배정하면, 이 변수는 마치 미리 선언했던 변수처럼 잘 동작한다.

이는 전역 변수를 선언하지 않은 채 사용할 수 있다는 의미다. 하지만 이것은 나쁜 습관이며 버그의 근원이므로,


항상 변수는 var로 선언해야한다.



'웹 개발 > Javascript 등' 카테고리의 다른 글

함수 - 유효범위와 끓어올림(Hoisting)  (0) 2015.03.18

+ Recent posts