'var'와 'let'의 차이점은 무엇입니까?

범위 지정:



주요 차이점은 범위 지정 규칙입니다. var 키워드로 선언된 변수는 즉시 함수 본문(따라서 함수 범위)으로 범위가 지정되고 let 변수는 { }(따라서 블록 범위)로 표시된 직접 둘러싸는 블록으로 범위가 지정됩니다.

function variablesTest() {
  var dav = "Dav";
  let ron = "Ron";

  console.log(dav, ron); // Dav Ron

  {
    var ilm = "Ilm"
    let hub = "Hub";
    console.log(ilm, hub); // Ilm Hub
  }

  console.log(ilm); // Ilm
  console.log(hub); // ReferenceError
}

variablesTest();


let 키워드가 언어에 도입된 이유는 함수 범위가 혼란스럽고 JavaScript의 주요 버그 소스 중 하나였기 때문입니다.

게양:



var 키워드로 선언된 변수는 호이스트(코드가 실행되기 전에 undefined로 초기화됨)되는 동안 선언되기 전에도 둘러싸는 범위에서 액세스할 수 있음을 의미합니다.

function varCheck() {
  console.log(name); // undefined
  var name = "Davron";
  console.log(name); // Davron
}

varCheck();


let 변수는 정의가 평가될 때까지 초기화되지 않습니다. 초기화 전에 액세스하면 ReferenceError가 발생합니다. 변수는 블록 시작부터 초기화가 처리될 때까지 "시간적 사각지대"(내 다음 기사의 주제가 될 것입니다)에 있다고 합니다.

function letCheck() {
  console.log(name); // ReferenceError
  let name = "Davron";
  console.log(name); // Davron
}

letCheck();


전역 개체 속성:



최상위 수준에서 let은 var와 달리 전역 객체에 속성을 생성하지 않습니다.

  var x = 'global'; // globally scoped
  let y = 'global'; // not allowed to be globally scoped
  console.log(this.x); // "global"
  console.log(this.y); // undefined


재선언:



엄격 모드에서 var를 사용하면 동일한 범위에서 동일한 변수를 다시 선언할 수 있고 let은 SyntaxError를 발생시킵니다.

var name = "Davron"
var name = "John"
console.log(name) // 'Davron' is now replaced with 'John'

let surName = "Abdukhakimov"
let surName = "Doe" // SyntaxError Identifier 'surName' has already been declared
console.log(surName)

좋은 웹페이지 즐겨찾기