>웹 프론트엔드 >JS 튜토리얼 >Javascript에서 var와 let의 차이점과 유사점

Javascript에서 var와 let의 차이점과 유사점

黄舟
黄舟원래의
2017-08-08 13:52:211624검색


Javascript에서 var와 let의 차이점

Javascript에서 변수를 선언하는 방법에는 let, var, const 세 가지가 있습니다. Let과 const는 어휘 환경에서 동일하게 작동하지만 var는 매우 다릅니다. Var는 초기에 도입되었으며 일반적으로 최신 Javascript에서는 사용되지 않지만 혼동하지 않기를 바라면서 이 기사에서는 이에 대해 자세히 설명합니다. 너.

예제 1 둘은 동일합니다

function sayHi() {
  var phrase = "Hello"; // local variable, "var" instead of "let"

  alert(phrase); // Hello
}

sayHi();

alert(phrase); // Error, phrase is not defined

예제 2 둘은 다릅니다

다음은 다릅니다. var에는 블록 영역이 없고 전역 또는 기능 영역만 있으며 블록 영역을 교차할 수 있습니다.

if (true) {
  var test = true; // use "var" instead of "let"
}

alert(test); // true, the variable lives after if

두 번째 줄에 let을 사용하면 alter 문에서 테스트에 액세스할 수 없습니다. 그러나 var는 코드 블록을 무시하므로 실제로 테스트 변수를 전역 변수로 선언합니다.

루프에서도 마찬가지입니다. var는 블록 영역이나 로컬 루프 영역이 될 수 없습니다.

for(var i = 0; i < 10; i++) {
  // ...
}

alert(i); // 10, "i" is visible after loop, it&#39;s a global variable

코드 블록이 함수에 있으면 var는 함수 수준 변수가 됩니다.

function sayHi() {
  if (true) {
    var phrase = "Hello";
  }

  alert(phrase); // works
}

sayHi();
alert(phrase); // Error: phrase is not defined

보시다시피, var는 if, for 또는 기타 코드 블록을 통과합니다. 이때 초기 Javascript 블록에는 어휘 환경이 없었고 var는 초기의 레거시 제품이었습니다.

var는 함수 시작 부분에서 처리됩니다.

var 선언은 함수 시작 부분(또는 전역 변수의 경우 스크립트 시작 부분)에서 처리됩니다. 즉, var 변수는 정의된 위치에 관계없이 함수 시작 부분에 선언됩니다(중첩 함수에 정의되지 않았다고 가정). 코드 예:
함수 sayHi() {
Phrase = "Hello";

  alert(phrase);

  var phrase;
}

는 다음 코드와 동일한 효과를 갖습니다.

function sayHi() {
  var phrase;

  phrase = "Hello";

  alert(phrase);
}

무시된 코드 블록에서도:

function sayHi() {
  phrase = "Hello"; // (*)

  if (false) {
    var phrase;
  }

  alert(phrase);
}

모든 변수가 함수의 최상위로 승격되므로 이 동작을 일반적으로 "승격"이라고 합니다. . 따라서 예제의 if(false) 코드는 절대 실행되지 않지만 문제가 되지 않습니다. var는 함수의 최상위로 승격되고 모든 예제의 (*) 줄에 있는 변수는 이미 존재합니다.

문은 승격되었으나 과제는 승격되지 않습니다
시연 예시는 다음과 같습니다.
함수 sayHi() {
Alert(phrase);

  var phrase = "Hello";
}

sayHi();

var =phrase = “Hello” 두 가지 작업이 있습니다
1. 변수 var
2를 선언합니다. 변수 할당 =

선언은 함수의 맨 위로 승격되지만 할당은 항상 코드의 실제 효과는 다음과 같습니다.

function sayHi() {
  var phrase; // declaration works at the start...

  alert(phrase); // undefined

  phrase = "Hello"; // ...assignment - when the execution reaches it.
}

sayHi();

모든 선언이 함수의 최상위로 승격되므로 함수의 다른 곳에서 참조할 수 있지만 변수는 할당 전에 정의되지 않습니다. 위의 두 가지 예시 경고는 오류 없이 실행됩니다. 변수 문구가 이미 존재하지만 값이 할당되지 않았기 때문에 undefound가 표시됩니다.

요약

var에는 두 가지 주요 차이점이 있습니다.

1. 변수에는 블록 범위가 없으며 최소 표시 범위는 함수 수준입니다.
2. 변수 선언이 함수의 맨 위로 승격됩니다.

이 차이는 대부분의 경우 좋지 않습니다. 블록 수준 변수를 만들 수 없으며 변수 위치를 승격하면 오류가 발생할 여지가 더 많아집니다. 따라서 새로운 스크립트 변수는 거의 사용되지 않습니다.

위 내용은 Javascript에서 var와 let의 차이점과 유사점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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