JavaScript의 범위: 'var'의 이상한 동작

JavaScript의 범위


  • 글로벌 범위
  • 기능 또는 로컬 범위
  • 블록 범위



  • 글로벌 범위


  • 전역 범위에서 선언된 변수, 개체 및 함수는 파일의 모든 부분에서 액세스할 수 있습니다.

  • 예시:



    var globalVariable = "I am a global variable";
    
    let globalVariableDeclaredWithLet =
      "I am a global variable declared with let keyword";
    
    const globalConstant = "I am a global constant";
    
    function globalFunction() {
      console.log("I am a global function");
    }
    

  • 위의 예에서 모든 변수, const 및 함수에는 전역 범위가 있으므로 해당 파일의 어디에서나 액세스할 수 있습니다.



  • 기능 또는 로컬 범위


  • 함수 내에서 선언된 변수, 객체 및 함수에는 기능적 범위가 있습니다.
  • 변수는 해당 함수 내에서만 액세스할 수 있습니다.

  • 예시:



    function globalFunction() {
      var localVariable = "I am a local variable";
    
      let localVariableDeclaredWithLet = "I am a local variable declared with let";
    
      function localFunction() {
        console.log("I am a local function and I can be called within this function only");
      }
    
      localFunction(); //  I am a local function and I can be called within this function only
    }
    // invoking localFunction outside the function
    localFunction(); // ReferenceError: localFunction is not defined.
    



    블록 범위:


  • if, while, for etc 코드 블록 내부에 선언된 변수, 객체 및 함수.
  • 변수, 개체 및 함수는 해당 블록 내에서만 액세스할 수 있습니다.

  • 예시:



    if(true) {
      let blockVariable = "I am a block variable";
      let blockFunction = () {
        console.log("I am a block function");
      }
      // blockFunction can be called here
      blockFunction(); //I am a block function
    }
    // blockFunction cannot be called outside the block
    blockFunction(); //ReferenceError: blockFunction is not defined
    



    'var'의 이상한 동작


  • var 키워드로 선언된 변수는 블록 범위를 유지하지 않습니다.

  • 예시:



    if (true) {
      var iAmWeird = "I am weird and you can access me from outside this block.";
    }
    
    //  iAmWeird can be accessed outside the block.
    console.log(iAmWeird); // I am weird and you can access me from outside this block.
    



    키워드 없이 선언됨


  • 키워드 없이 선언된 변수, 함수, 객체는 블록 범위를 유지하지 않으며 블록 외부에서 액세스할 수 있습니다.

  • 예시:



    if (true) {
      iAmWeird = "I am weird and you can access me from outside this block.";
    
      function weirdFunction() {
        console.log("I am a weird function and you can call me from outside this block");
      }
    }
    
    console.log(iAmWeird); // I am weird and you can access me from outside this block.
    
    weirdFunction(); // I am a weird function and you can call me from outside this block
    



    let과 const


  • 블록 범위를 유지하지 않는 var의 동작은 코드에 많은 문제를 일으킬 수 있습니다.

  • let 및 const는 이러한 유형의 var 동작을 구출합니다.

  • let과 const는 블록 범위를 유지합니다.

  • 예시:



    if (true) {
      let iAmWeird =
        "I am not weird and you cannot access me from outside this block.";
    
      const weirdFunction = function () {
        console.log("I am  not a weird function and you cannot call me from outside this block");
      };
    }
    
    console.log(iAmWeird); // ReferenceError: iAmWeird is not defined.
    weirdFunction(); // ReferenceError: weirdFunction is not defined.
    

    좋은 웹페이지 즐겨찾기