>웹 프론트엔드 >JS 튜토리얼 >자바스크립트의 왼쪽 쿼리와 오른쪽 쿼리에 대한 심층적인 이해

자바스크립트의 왼쪽 쿼리와 오른쪽 쿼리에 대한 심층적인 이해

零到壹度
零到壹度원래의
2018-04-04 10:41:494018검색

이 글은 주로 JavaScript의 왼쪽 쿼리와 오른쪽 쿼리에 대한 심층적인 이해를 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로 이제 공유하고 참고용으로 제공하겠습니다. 와서 저와 함께 살펴보세요

Values ​​and References

Scope

  • 좁은 의미에서 스코프는 객체입니다(더 정확하게는 컬렉션이어야 합니다) ;

  • 넓게 말하면 범위는 변수를 저장하고 나중에 이러한 변수를 쉽게 찾을 수 있도록 하는 규칙 집합입니다.

    • 범위는 선언된 모든 식별자로 구성된 일련의 쿼리를 수집하고 유지 관리하는 역할을 합니다. 그리고 현재 실행 중인 코드의 이러한 식별자에 대한 액세스 권한을 결정하는 매우 엄격한 규칙 집합을 구현합니다.

Context

  • 코드 실행 전 준비사항(전역 코드, 함수 본문, 평가 코드):

    • 1. 승격(변수 함수 표현)

    • 2. 이는

    • 3을 가리킵니다.

    • 코드 세그먼트가 함수 본문인 경우 이를 기준으로 다음을 추가해야 합니다.

  • 범위 및 실행 컨텍스트 환경 간의 관계:


    • 범위에는 여러 컨텍스트 환경이 포함될 수 있습니다. 컨텍스트가 없었을 수도 있습니다(함수가 호출된 적이 없음). 이제 함수가 호출된 후 컨텍스트가 파괴됩니다.

왼쪽/오른쪽 쿼리

  • 왼쪽 쿼리 :

    • 할당 연산의 대상인 할당 기호의 왼쪽

    • 함수 호출 시 실제 참여하는 형식 매개 변수 간의 관계는 왼쪽 쿼리입니다.

    • 등호 왼쪽에 있는 변수에 대한 쿼리입니다. 전체 범위 체인에서 변수 선언이 발견되지 않으면 js 엔진은 자동으로 동일한 이름의 변수를 전역적으로 선언하지만 이 변수의 선언은 승격되지 않습니다.


      (function(){
          function test(a){
              b=a;
              console.log(b);//2
          }
          test(2);
      })();
      console.log(b);//2

  • 오른쪽 쿼리:

    • 대입 연산의 소스인 할당 기호의 왼쪽이 아닌 쪽

    • 등호의 왼쪽이 아닌 변수에 대한 쿼리 . 전체 범위 체인에서 변수 선언을 찾을 수 없으면 ReferenceError 오류가 직접 발생합니다.

      console.log(a);//ReferenceError: a is not defined

    • Special right query

      //a并未定义赋值
      console.log(typeof a);//undefined

  • strict 모드 & non-strict 모드

    • RHS, LHS가 발생합니다. ReferenceError 예외

    • ReferenceError 예외는 범위 결정 실패와 관련이 있지만 TypeError는 범위 결정에 성공했지만 결과에 대한 작업이 불법이거나 불합리하다는 것을 의미합니다. 쿼리가 모든 중첩 함수를 쿼리하고 있습니다. 필요한 변수를 도메인에서 찾을 수 없으면 엔진은 ReferenceError 예외를 발생시키지만 typeof를 사용할 때는 예외가 보고되지 않는다는 점에 유의해야 합니다.

    • 왼쪽 쿼리는 찾을 수 없습니다. 쿼리 변수의 모든 중첩 범위에 필요한 변수가 있으면 해당 이름의 변수가 전역 범위에 생성됩니다.

    • 변수가 선언되지 않은 경우(변수를 어떤 범위에서도 찾을 수 없음) 이 두 쿼리는 다릅니다. 동일합니다.

    • 비엄격 모드:

    • 엄격 모드:


    • 보안 방지 메커니즘 유형

  • 1. 전역 변수 DEBUG를 "디버그"로 사용합니다. 프로그램의 mode" 스위치, DEBUG.js 파일의 명령문 var DEBUG =true; 이 파일은 개발 및 테스트 중에만 브라우저에 로드되고 프로덕션 환경에는 로드되지 않습니다.

    if(DEBUG){ //在生产环境中会报错
             console.log("开始调试");
      }  if(typeof DEBUG !== "undefined"){
              console.log("开始调试");    
      }
    • 2. 누락된 함수에 대한 작성 폴리필(현재 실행 환경에서 누락된 함수를 보완하는 데 사용되는 패딩 코드)

      if(typeof polyfill_a === "undefined"){        //注意这一块不需要var,跟变量的提升有关
                 //这一块需要使用函数表达式而不是函数声明
                 polyfill_a = function(){
                    //功能代码
                 }
         }

    • 관련 권장 사항:

왼쪽 및 오른쪽 쿼리

의 차이점 왼쪽 쿼리와 오른쪽 쿼리

위 내용은 자바스크립트의 왼쪽 쿼리와 오른쪽 쿼리에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.