최근에 ES6이 출시 된 후에 많은 소스에서 "var"대신 "const"및 "let"을 사용하라는 제안을 받았으며 JavaScript에서 "var"사용을 중단해야합니다. 궁금한 점은 "var"이 모든 관점에서 "let"보다 이점이 없다면 왜 var를 고치지 않았는가, 아니면 "var"를 사용하지 않고 왜 서로를 나란히 놓는 것입니까?JavaScript - 왜 더 이상 사용되지 않습니다
답변
하위 호환성.
var
을 let
(함수의 시작 부분에 정의한 경우 그 의미는 기본적으로 동일 함)보다 실질적으로 이점이 없다는 것이 옳은 말입니다.
var
을 사용하여 새 코드를 작성할 실제 이유가 없다는 것이 맞습니다.
인터넷에 수십 년 된 페이지가 있습니다. 아무도 그 페이지를 다시 작성하지 않습니다. 언어에서 var
을 제거하면 얻을 수있는 것이 없습니다. 해석되는 HTML 및 Javascript와 같은 언어의 경우, 이전 버전과의 호환성은 절대적으로 필수입니다.
그래서 그들은 단순히 var
을 다시 정의하지 않기로 결정한 것입니다. 다음 예제 코드를 살펴보십시오.
// THIS IS AN EXAMPLE OF BAD CODE. DO NOT COPY AND PASTE THIS.
if (logic) {
var output = "true"
} else {
var output = "false"
}
console.log(output)
는 var
let
경우는 다음 console.log
때문에 범위 차이의 기준 오차가 발생할 것처럼 동작하도록 변경 하였다.
모든 것은 var const를 사용하여 장점과 단점을 가지고 있으며 let은 사용 사례에 따라 다릅니다.
var
변수 선언은 코드 실행 전에 처리됩니다. var로 선언 된 JavaScript 변수의 범위는 현재 실행 컨텍스트입니다. 함수 외부에서 선언 된 JavaScript 변수의 범위는 전역 변수입니다.
let
let 문을 사용하면 변수가 사용되는 블록으로 제한된 범위를 만들 수 있습니다.
const
const 문 값은 한 번 지정할 수 있으며 다시 할당 할 수 없습니다. const 문 범위는 let 문과 유사하게 작동합니다.
귀하의 이해를 바랍니다.
당신은'var'에 어떤 이점도 나열하지 않았습니다. 함수 나 전역 레벨에서도'let'을 사용할 수 있습니다. 그래서 블록에서'var'을 선언하는 것처럼 불쾌한 일을 한 후에 그 블록 밖에서 사용하는 이점이 있습니다. –
"* 변수 선언은 코드 실행 전에 처리됩니다."- ['let'과'const'도 마찬가지입니다.] (https://stackoverflow.com/q/31219420/1048572) – Bergi
가끔씩 적은 코드를 작성하기 위해 변수를 재 선언해야한다고 생각합니다. "나는 그것을 얻을의 do
블록 내부에 id
변수 단순히 선언하고
function makeUniqueId(takenIds) {
do {
var id = Number.parseInt(Math.random() * 10);
} while (takenIds.includes(id))
}
여기에
makeUniqueId([1,2,3,4,5,6,7])
처럼 호출 할 수 있습니다 :
한 예는 고유 ID를 생성이 기능입니다 함수 범위에 "게양했다. 보시다시피, id
은 아마도 여러 번 다시 선언 될 것입니다. let
을 사용하면 오류가 발생합니다.재 선언 때문에. while
블록에 do
블록의 변수가 표시되지 않으므로 오류가 발생합니다. 물론 do..while
전에 let
을 선언 할 수는 있지만 코드의 추가 라인을 사용하여 동일한 기능 범위 변수를 만들 수 있습니다.
또 다른 예로은 코드를 devtools 콘솔에 복사하고 변수가 다시 선언 될 때마다 나타납니다.
또 다른 예. 변수 선언을 사용법에 가깝게 유지하면서 함수 선언을 함수 전역 변수로 취급하려는 경우 어떻게해야합니까? 이 방식으로 let
을 사용하면 dev 도구 (모든 블록, 블록 범위)에서 오히려 혼란스러운 만기가됩니다.
변경하거나 코드 억 개 라인에 대해 끊을 제거하기 때문입니다. –
'var'은 함수 범위를 원하고 범위를 차단하지 않을 때'let'보다 훨씬 유용합니다. – Paulpro
여전히'var'을 사용합니다. – jhpratt