23/10/28 til 전역변수와 지역변수

2023. 10. 28. 19:29카테고리 없음

지금까지 변수선언과 할당을 했는데도 그것을 왜 콘솔로그로 찍지 못하는가에 대한 이유를 알게됨

이 개념이 명확하지 않았는데 확실히 알겠음 지려버림ㅋㅋㅋㅋㅋㅋㅋㅋ

var vscope = "global"

function fscope(){

   

       alert(vscope);

}

fscope();  // 이러면 글로벌이 경고됨  펑션안에  있는애들은 펑션밖(전역변수)를 끌어다가 쓸수 있음

 

~~~~~~~~~~~~~~~~~~~~~~~

var vscope = "global"

function fscope(){

       var vscope = "local"

       alert(vscope);

}

fscope();     // 이러면 로컬이 출력됨 일단 같이 함수안에 있는 지역변수를 찾아쓰는데 함수안에

// vscope 가 선언 할당 되어있기 때문에 로컬이 출력됨

 

~~~~~~~~~~~~~~~~~~~~~~~~

 

function fscope(){

       var vscope = "local"

       alert(vscope);

}

fscope();                     // 이렇게 하면 요값은 함수 실행이기 때문에 확실히 로컬이 경고로뜸

 alert(vscope);              // 하지만 요건 안뜸 왜냐 vscope는 지역변수로 써 함수 안에서 선언되었기 떄문에

// 전역에서는 이걸 끌어다가 쓸수가 엄슴 ㅋ

 

~~~~~~~~~~~~~~~~~~~~~~~~~~

var vscope = "global"

function fscope(){

       var vscope = "local"

     

}

fscope();

 alert(vscope);    // 이렇게 하면 글로벌이 뜸 왜냐 함수안에서 재 선언된건 전역에서 적용안되기 때문에

 

~~~~~~~~~~~~~~~~~~~~~~~~~~

 

var vscope = "global"

function fscope(){

       vscope = "local"

     

}

fscope();

 alert(vscope);

 

//여기서 쇼킹함  함수안에 var를 하나 뺏을 뿐인데 이건 로컬이 찍힘 와우

// 함수안에서 재선언한게 아니라 전역에서 선언한 식별자를 함수안에서 재할당 했기때문에!!!

// 즉 재할당한것은 전역에 영향을 끼친다는 이야기 var로 선언해서 그런듯 

//추측하건데 let도 될듯 근데 const는 재할당이 안되니까 안되지 않을까?

// var let const 왜 선언하는애들이 3개가 있을까에 대한 의문이 어느정도 풀림

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

var vscope = "global"

function fscope(){

      var  vscope = "local"

       vscope = "local"

     

}

fscope();

 alert(vscope);

//이러면 얘기가 또 다름 함수안에서 재할당한거는 로컬의 선언을 재할당함 전역에 vscope는 안건듬

//그래서 경고에 글로벌이뜸 홀리

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

function a(){

     var i = 0;

}

 for ( var i = 0 ; i < 5 ; i++ ) {

       a();

     document.write(i);

}

// 포문안에 a함수를 실행시켜 선언된 지역변수 아이를 가져옴 

//포문이니까 브라우저에 01234 가 찍힘 평범함

function a(){

     i = 0;

}

 for ( var i = 0 ; i < 5 ; i++ ) {

       a();

     document.write(i);

}

//근데 요번에는 함수에 var를 뺌 그러면 이건 이제 함수안에 지역변수가 아니라 

모든 것에 영향을 끼치는 전역함수임 그러면 포문을 돌릴때 

아이가 돌아갈때마다 i값을 1씩 증가시켜줬지만 전역변수라서 i가 영으로 초기화된다고함 

결국 브라우저는 무한로딩되고 아무것도 안찍힘 0도 안찍힘 왜냐 작업을 완료를 못하거덩

 

~~~~~~~~~~~~~~~~~~~~~~~~~

 

// 함수 안에서 선언된것만 지역변수이다. 포문이나 와일문등 함수가 아닌것들은 안에서 선언되어도 전역변수

 

~~~~~~~~~~~~~~~~~~

 

var i  = 5 ;

 

function a(){

      var i = 10 ;

       b() ;

}

 

function b(){

      document.write(i);

}

// 이러면 과연 무엇이 찍힐것인가? 전역함수인 5? 아니면 함수안 지역변수 10?

// 이 강의 처음들었을때 10찍힐줄 알았음 펑션안에 i값이 있으니까 같은 함수안에 있는 b함수는 

// 재선언 값을 가져올줄 알았는데 아님

// 함수가 실행 될때가 아니라 함수가 설정될때의 값을 가져옴 즉 함수가 설정될때의 b함수 안에 i가 재선언된것이 아니

//기 때문에 전역변수 i의 값인 5를 가져옴

//b함수에 i가 재선언 됐다면 그걸 가져올것임