2017-11-24 38 views
0

최근에 ES6이 출시 된 후에 많은 소스에서 "var"대신 "const"및 "let"을 사용하라는 제안을 받았으며 JavaScript에서 "var"사용을 중단해야합니다. 궁금한 점은 "var"이 모든 관점에서 "let"보다 이점이 없다면 왜 var를 고치지 않았는가, 아니면 "var"를 사용하지 않고 왜 서로를 나란히 놓는 것입니까?JavaScript - 왜 더 이상 사용되지 않습니다

+2

변경하거나 코드 억 개 라인에 대해 끊을 제거하기 때문입니다. –

+3

'var'은 함수 범위를 원하고 범위를 차단하지 않을 때'let'보다 훨씬 유용합니다. – Paulpro

+1

여전히'var'을 사용합니다. – jhpratt

답변

2

하위 호환성.

varlet (함수의 시작 부분에 정의한 경우 그 의미는 기본적으로 동일 함)보다 실질적으로 이점이 없다는 것이 옳은 말입니다.

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) 

varlet 경우는 다음 console.log 때문에 범위 차이의 기준 오차가 발생할 것처럼 동작하도록 변경 하였다.

+0

답변 해 주셔서 감사합니다. 감사합니다. 그러나 대답은 "왜 var를 사용하지 않는가"라는 질문의 한 부분 만 해결합니다. "var"를 처음부터 리팩토링하고 "let"을 도입하지 않는 방법은 무엇입니까? 그럴만한 이유가 있습니까? –

+1

다시, 이전 버전과의 호환성. 만약 사람들이 당신의 질문에 대한 설명에 끔찍한 방식으로'var'을 사용했다면, 그 코드는 의미를 바꾸어 버릴 것입니다. – Shadow

+0

예제를 추가했습니다. – Shadow

1

모든 것은 var const를 사용하여 장점과 단점을 가지고 있으며 let은 사용 사례에 따라 다릅니다.

var 

변수 선언은 코드 실행 전에 처리됩니다. var로 선언 된 JavaScript 변수의 범위는 현재 실행 컨텍스트입니다. 함수 외부에서 선언 된 JavaScript 변수의 범위는 전역 변수입니다.

let 

let 문을 사용하면 변수가 사용되는 블록으로 제한된 범위를 만들 수 있습니다.

const 

const 문 값은 한 번 지정할 수 있으며 다시 할당 할 수 없습니다. const 문 범위는 let 문과 유사하게 작동합니다.

귀하의 이해를 바랍니다.

+0

당신은'var'에 어떤 이점도 나열하지 않았습니다. 함수 나 전역 레벨에서도'let'을 사용할 수 있습니다. 그래서 블록에서'var'을 선언하는 것처럼 불쾌한 일을 한 후에 그 블록 밖에서 사용하는 이점이 있습니다. –

+0

"* 변수 선언은 코드 실행 전에 처리됩니다."- ['let'과'const'도 마찬가지입니다.] (https://stackoverflow.com/q/31219420/1048572) – Bergi

1

가끔씩 적은 코드를 작성하기 위해 변수를 재 선언해야한다고 생각합니다. "나는 그것을 얻을의 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 도구 (모든 블록, 블록 범위)에서 오히려 혼란스러운 만기가됩니다. enter image description here

그러나 var 한 '지역'목록에 둘을 '유지' enter image description here