>웹 프론트엔드 >JS 튜토리얼 >자바스크립트 범위에 대한 자세한 설명

자바스크립트 범위에 대한 자세한 설명

藏色散人
藏色散人앞으로
2019-05-07 09:15:222571검색

범위 이해: 정의된 변수와 함수가 적용되는 범위. JavaScript에는 전역 범위와 함수 범위라는 두 가지 유형이 있습니다.

참고: es6은 js에 기본이 아닌 let 블록 수준 범위를 구현합니다. 하단 레이어도 var를 통해 구현됩니다. 구체적인 내용을 알고 싶으시다면 babel 공식 사이트를 방문해 es6의 let을 분석해 보시기 바랍니다.

실행 컨텍스트

범위: 단락 내 또는 함수 내
전역: 함수 선언, 변수 선언. 범위:;
함수: 함수 선언, 변수 선언, this, 인수. 범위: 함수 내부;

함수 및 변수 선언 승격

<script>
        foo(); //打印a
        var foo = 1;
        function foo (){
            console.log(’a‘)
        };
        console.log(foo); //1
</script>


//实际的执行顺序为
<script>
        function foo(){  //函数声明优先于变量的声明
            console.log("a");
        }
        //var a ;  重复声明,这儿被省略了。
        foo(); //打印a
        foo = 1;  //给foo赋值为1
        console.log(foo); //1
</script>

js 엔진이 실행 컨텍스트 코드 블록을 실행할 때 실행 순서는 다음과 같습니다.
1. 함수 선언 함수 a(){}; let a = function (){}; 이는 함수 선언이 아니라 변수 선언 및 할당입니다.
2. 변수 선언 var a; 참고: 처음에는 변수만 선언되고 할당이 수행되지 않습니다. 할당 전에 이 변수를 사용하면 값이 정의되지 않습니다.
3. 실행 컨텍스트가 함수 범위인 경우: 이를 결정하고 인수를 지정합니다.
4. js 단일 스레드 및 비동기 전략에 따라 범위 내 코드를 순차적으로 실행합니다.

우리는 var a = 2;를 명령문으로 생각하는 데 익숙하지만 실제로 JavaScript 엔진은 그렇게 생각하지 않습니다. var a 및 a = 2를 두 개의 별도 선언으로 처리합니다. 첫 번째 선언은 컴파일 시간 작업이고 두 번째 선언은 실행 시간 작업입니다. 즉, 범위 내 어디에 선언이 나타나든 코드 자체가 실행되기 전에 먼저 처리됩니다. 이 프로세스는 모든 선언(변수 및 함수)이 해당 범위의 맨 위로 "이동"되는 것으로 쉽게 생각할 수 있습니다. 이 프로세스를 호이스팅이라고 합니다. 반복되는 선언을 피하도록 주의하세요. 특히 일반적인 var 선언과 함수 선언이 혼합된 경우에는 많은 위험한 문제가 발생합니다!

스코프 체인

자유 변수: 현재 스코프에는 정의되어 있지 않지만, 상위 스코프에 정의되어 있어 이 스코프에서 사용할 수 있는 변수입니다.
범위 체인: 변수를 사용할 때 먼저 해당 범위에서 검색하고, 발견되지 않으면 전역 범위를 찾을 때까지 상위 범위에서 검색합니다.

블록 수준 범위

js에는 블록 수준 범위가 없고 전역 범위와 함수 범위만 있습니다.
ES6는 전역 범위 let의 특수 구현을 통해 js의 블록 수준 범위를 구현합니다.
의 유효 범위는 { }입니다.
const는 정의된 상수입니다. 참고: 정의된 상수의 값이 저장되는 메모리 주소는 변경할 수 없습니다. 예를 들어 상수가 배열 또는 객체로 정의된 경우와 같이 값이 가변적인 경우 배열 또는 객체 메소드를 통해 원본 데이터를 조작할 수 있습니다. 값을 다시 할당하지 않는 한 문제가 없습니다.

위 내용은 자바스크립트 범위에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제