Javascript

[JS]Chain Scope 예시 2개

{let variable = "top-level";

        function parentfunction() {
            let variable = "local";

            function childfunction() {
                return variable;
            }

            return childfunction(); // 'local'
        }
variable의 값은 무엇이 나올까?

  첫번째 예시에서 variable의 값은 무엇이 나올까
언뜻보면 맨위의 anonymous function을 보면 variable의 값이 top-level이 아닐까 하는 생각이 든다 하지만 문제에서 요구하는 것은 
parentfunction()을 실행시켯을때의 variable의 이다 

  따라서 안쪽에서 실행된 함수 parentfunction() 새로운 변수 variable을 만들고 생성하게 된다  
이렇게 생성된 'Block scope'안의 변수는 호출되게 되면 먼저 블럭안의 변수를 검사하고 검사후 블럭안에 없으면 상위의 Scope를
탐색하게 된다. 따라서 함수안에서 선언된 variable이 우선순위를 가지므로 값은 "local'이 된다

function check() {
        let variable = "top-level";

        function parentfunction() {
            let variable = "local";

            function childfunction() {
                return variable;
            }

            return childfunction();
        }
        console.log(variable) // top-level 확인
    };

  이다음의 예시는 실행을 check()로 하게되면 먼저 선언되는 variable이 다음에 재선언 되는것을 인정하지 않기때문에 값은 "top-level"이 되게 된다 애초에 함수 check는 실행되면 다른 함수안에 있는 변수선언을 볼수가없다.

'Javascript' 카테고리의 다른 글

[JS] if (Number(str[i])===true) 의 값  (0) 2020.08.09
[JS]Closure에 대해  (0) 2020.08.06
[JS]Scope 변수의 변화 해설  (0) 2020.08.03
[JS]Object 기본개념  (0) 2020.07.19
[JS]Object, Property, Method  (0) 2020.07.09