codegrow
codegrow
  • 2016.4.15 14:40
  • 조회수 262
  • 답변수 1
codegrow
codegrow
  • 2016.4.15 14:40
  • 조회수 262
  • 답변수 1

질문 있습니다.~

function shadowing_example(){
var val = 0; // 한 함수 안에서만 값이 유지되는 변수
console.log("F", val); // 0
val++;
}
var val = 0; // 여러 함수에서 값이 유지되면서 사용되는 변수
shadowing_example();
console.log("o", val); // 0
console.log("o2", val); // 0

Q1. 순차적으로 실행 되기 때문에
val++; 에서 val =1 이 되더라도 전역함수인 var val=0; 에서 다시 초기화 되고
console.log("o", val) 에서 출력 값이 0 이 되는 건가요?

function shadowing_example(){
console.log("F", val);

val++;
}
var val = 0;

shadowing_example(); // 0
console.log("o", val); // 1

동영상 초반 부분에 보면 fucntion안에 지역변수가 없어서
shadowing_example()이 실행 됬을 때! console.log("F",val);은 전역함수를 끌어다가 쓰는 거라서 0 이 되고
이후 순차적으로 실행 되기 때문에 val++ 이 남아 있어서 1을 출력 하는 건가요?
근데 순차적으로 생각 해보면 제가 Q1 에 질문 한 내용이라 또 말이 맞지가 않는데..

val ++; 은 어떻게 되는 건지 궁금합니다.

Q2. 여러 함수에서 값이 유지되면서 사용되는 변수라는건... 만약에 (아래 함수추가)

function shadowing_example(){
var val = 0; // 한 함수 안에서만 값이 유지되는 변수
console.log("F", val); // 0 ( var val =5 면 출력 값 5 )
val++;
}
var val = 0; // 여러 함수에서 값이 유지되면서 사용되는 변수
shadowing_example();
console.log("o", val); // 0
console.log("o2", val); // 0

function shadow_two (){
console.log("two", val);
val++;
}

이렇게 function 안에 지역함수가 없는 경우에 var val=0 (전역함수)를 여러함수에서 사용 할 수 있다는 말씀이신가요?

  • #자바스크립트 입문
  • #변수의 shadowing

1 답변

  • 천룡
    천룡
    • 2017.5.7 17:25

    1. 보시면 Function shadowing 안에 val 0; 는 지역변수 (Private)

    그리고 함수밖에 전역변수 val 0; 가 있습니다.
    (public)

    1. shadowing_example();
    2. console.log("o", val); // 0
    3. console.log("o2", val); // 0 를 보시면

    (1). 은 함수를 호출하고
    함수내에 선언된 지역변수 val 을
    Log로 출력후 val++합니다
    이는 내부에 선언된 지역변수 val 이 있기때문에 전역변수를 가리고 지역변수를 가르키기때문에 지역변수 val을 건들이게됩니다.
    그럼 0을 출력후 지역변수는 1이 되었습니다.

    (2). 는 val을 출력하는데 이는 함수를 호출한게 아니기때문에 함수내의 지역변수 val에는 접근 권한이없습니다.
    다른 프로그래밍언어도 그렇듯 함수내의 지역변수던 오브젝트던 함수가호출되어야 생성됩니다.
    함수호출없이 함수내의 변수를 출력하면 undefined 에러를 반환합니다
    전역변수인 val 이 있기때문에 함수내부가 아닌 전역변수를 가르킵니다.

    (3). 역시 동일합니다.

    이수행을 마치면
    지역변수 val은 1
    전역변수 val은 0 입니다.

    Q2.
    함수내에 선언된 변수가있다면 이는 전역변수를 가리기때문에
    1번함수는 지역변수를 사용하고
    함수에서 따로선언한 지역변수가없을땐 전역변수를 가르키기때문에
    모든함수에서 이 전역변수를 사용가능합니다.
    만약 2번함수에서 전역변수의 값을 3으로 변경후
    3번함수에서 지역변수선언없이 전역변수를 사용한다면 3의 값을 이용하게됩니다

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.