JavaScript에서 Const: 언제 사용할지, 필요한지를 확인합니다.
나는 최근에 자바스크립트에서 키워드를 발견했다.내가 아는 바로는, 이것은 불변의 변수를 작성하는 데 사용되며, Node.js에서 재정의할 수 없는 것을 확인하기 위해 테스트했습니다.
const x = 'const';
const x = 'not-const';
// Will give an error: 'constant 'x' has already been defined'
아직 모든 브라우저에 표준화가 되어 있지 않다는 것을 알고 있습니다.그러나 저는 Node.js V8의 컨텍스트에만 관심이 있습니다.또한 특정 개발자/프로젝트에서는 Node.js V8을 매우 선호하고 있는 것 같습니다.var
키워드를 사용하면, 같은 효과를 얻을 수 있습니다.
- 요?
const
var
- 재할당되지 않는 변수가 선언될 때마다 사용해야 합니까?
- '아예'와 '아예'가 요?
var
.const
니면부??? ??
두 . 즉, 2번 사용의 입니까?용의 기기 ?? ??? ????const
var
그리고 그렇게 하는 데 있어서 인간과 관련된 측면이 무엇인지도요.
기술적인 차이는 크다.컴파일된 언어에서 상수는 컴파일 시 대체되며, 이를 사용하면 데드 코드 제거와 같은 다른 최적화를 통해 코드의 런타임 효율성을 더욱 높일 수 있습니다.최신(사용률이 낮은 용어) JavaScript 엔진은 더 나은 성능을 얻기 위해 실제로 JS 코드를 컴파일하기 때문에 const 키워드를 사용하면 위에서 설명한 최적화가 가능하며 수행되어야 함을 알 수 있습니다.그 결과 퍼포먼스가 향상됩니다.
인간과 관련된 측면은 키워드의 의미에 관한 것입니다.변수는 변경이 예상되는 정보를 포함하는 데이터 구조입니다.상수는 변경되지 않는 정보를 포함하는 데이터 구조입니다. 에러의 여지가 있는 경우,var
항상 사용해야 합니다. 타임에 가 반드시 ,, 로, 로 however음로음음음음음 with with with with with with with with with with with with with however however however with라고 .const
변경되어야 할 에는 을 하십시오.var
실제 변경 내용이 코드에 표시되지 않더라도 이를 나타냅니다.
2017년 갱신
이 답변은 여전히 많은 관심을 받고 있다.이 답변은 2014년 초에 게시되었고 그 이후로 많은 변화가 있었습니다.ecmascript-6 지원이 표준이 되었습니다.현재 모든 최신 브라우저가 지원const
을 사용하다
2014년 원본 답변
브라우저 지원은 꽤 괜찮은 편이지만, 지금은 사용을 피하고 싶습니다.MDN 기사:
현재 const 실장은 Mozilla 고유의 확장이며 ECMAScript 5의 일부가 아닙니다.Firefox & Chrome(V8)에서 지원됩니다.Safari 5.1.7 및 Opera 12.00 에서는 이러한 브라우저에서 const를 사용하여 변수를 정의해도 나중에 값을 변경할 수 있습니다.Internet Explorer 6-10에서는 지원되지 않지만 Internet Explorer 11에는 포함되어 있습니다.const 키워드는 현재 함수 범위에서 상수를 선언합니다(var로 선언된 변수 등).
이어서 다음과 같이 표시됩니다.
const
ECMAScript 6은 ECMASCript 6 。let 문을 사용하여 선언된 변수와 마찬가지로 const로 선언된 상수는 블록 범위가 지정됩니다.
를 사용하는 const
약간 오래된 브라우저를 지원하려면 회피책을 추가해야 합니다.
「」를 사용하는 const
티보스의 대답은 훌륭해
하지만 당신은 말했다:
내가 알기로는, 그것은 불변의 변수를 만드는 데 사용된다.
그것은 틀렸다.변수 변환은 재할당과 다릅니다.
var hello = 'world' // Assigning
hello = 'bonjour!' // Reassigning
const에서는 이 작업을 수행할 수 없습니다.
const hello = 'world'
hello = 'bonjour!' // Error
단, 변수를 변환할 수 있습니다.
const marks = [92, 83]
marks.push(95)
console.log(marks) // [92, 83, 95] -> the variable has been mutated.
따라서, 변수 값을 변경하지 않고=
sign을 하고 있습니다.
★★★★★★+=
★★★★★★★★★★…★★★★★★★★★★★★★★★★★★!
var a = 5
a += 2 // Is the same as a = a + 2
결론은 '먹다' 입니다.const
변수를 변환하는 것을 막는 것이 아니라 변수를 재할당하지 않습니다.
이전 답변을 통합하면 성능상의 이유 외에 상수 변수를 선언하는 데 분명한 이점이 있습니다. 실수로 코드를 변경하거나 다시 발표하려고 해도 프로그램에서 각각 값을 변경하거나 오류를 발생시키지 않습니다.
예를 들어 다음과 같습니다.
// Will output 'SECRET'
const x = 'SECRET'
if (x = 'ANOTHER_SECRET') { // Warning! Assigning a value variable in an 'if' condition
console.log (x)
}
포함:
// Will output 'ANOTHER_SECRET'
var y = 'SECRET'
if (y = 'ANOTHER_SECRET') {
console.log (y)
}
또는
// Will throw TypeError: const 'x' has already been declared
const x = "SECRET"
/* Complex code */
var x = 0
와 함께
// Will reassign y and cause trouble
var y = "SECRET"
/* Complex code */
var y = 0
const
불변의 것은 아닙니다.
MDN에서:
const 선언은 값에 대한 읽기 전용 참조를 만듭니다.변수 식별자를 재할당할 수 없는 값일 뿐, 보유하는 값이 불변수 식별자를 재할당할 수 없습니다.
var: 변수를 선언합니다.값 초기화는 옵션입니다.
let: 블록 범위를 사용하여 로컬 변수를 선언합니다.
const: 읽기 전용 이름 있는 상수를 선언합니다.
예:
var a;
a = 1;
a = 2; // Reinitialize possible
var a = 3; // Re-declare
console.log(a); // 3
let b;
b = 5;
b = 6; // Reinitialise possible
// let b = 7; // Redeclare not possible
console.log(b);
// const c;
// c = 9; // Initialization and declaration at the same place
const c = 9;
// const c = 9; // Redeclare and initialization is not possible
console.log(c); // 9
// NOTE: Constants can be declared with uppercase or lowercase, but a common
// convention is to use all-uppercase letters.
당신은 훌륭한 답을 가지고 있지만, 단순하게 합시다.
const
정의된 상수가 있을 때 사용해야 합니다(프로그램 실행 중에 변경되지 않습니다).
예를 들어 다음과 같습니다.
const pi = 3.1415926535
할 수 에는 을 합니다.var
.
보면 '비교적으로 다르다'는 입니다.const
[... 3.14[...]을 사용하다 이것은 사실입니다.
「」라고 .var
3.14가 될 수 있습니다에누리하다
좀 더 기술적인 해답으로, 티보스는 학문적으로 옳다.
지금까지의 경험으로는 파일 경로나 서버 이름 등 하드 코딩된 비트를 찾을 필요 없이 나중에 변경하고 싶은 것을 설정할 때 const를 사용합니다.
하지만 당신의 테스트 오류는 또 다른 문제입니다.x라고 하는 다른 변수를 작성하려고 합니다.이것이 보다 정확한 테스트입니다.
const x = 'const';
x = 'not-const';
정말 개인적인 취향이에요.말씀하신 것처럼 재할당되지 않고 일정할 경우 const를 사용할 수 있습니다.예를 들어 생일을 지정하려는 경우.당신의 생일은 변하지 않기 때문에 상수로 사용할 수 있습니다.하지만 나이가 변하기 때문에 변수가 될 수 있습니다.
요약:.
const는 불변의 바인딩을 만듭니다.즉, const 변수 ID는 재할당할 수 없습니다.
const a = "value1";
에 재할당할 수 없습니다.
a = "value2";
단, const 식별자가 객체 또는 배열을 보유하고 있는 경우에는 재할당하지 않는 한 그 값을 변경할 수 있습니다.
const x = { a: 1 }
x.a = 2; // Is possible and allowed
const numbers = [1, 2];
numbers.push(3); // Is possible and allowed
const는 var(함수 범위)와 동일한 블록 범위입니다.
즉, 재할당 사용 Const를 통해 변경이 불가능할 경우 원하는 범위에 따라 let 또는 var를 사용합니다.
재할당을 통해 무엇을 변경할 수 있고 무엇을 변경할 수 없는지가 명백할 때 코드에 대해 추론하는 것이 훨씬 쉽습니다.경관을 렛으로 바꾸는 것은 아주 간단하다.디폴트로는 const로 하면 다시 한 번 생각하게 됩니다.그리고 이것은 많은 경우에 좋은 일입니다.
「 」의 var
★★★★★★★★★★★★★★★★★」let
var
★★★★★★★★★★★★★★★★★」let
는 머신 및 입니다.
이 과제의 가치는 실행 과정에서 변화할 것입니다.이 할당의 최종 값에 의존하지 마십시오.
「 」의 var
★★★★★★★★★★★★★★★★★」let
var
★★★★★★★★★★★★★★★★★」let
다른 프로그래머가 선언에서 최종 사용까지 모든 개입 코드를 읽도록 강제하고 프로그램 실행 시 해당 지점의 할당 값에 대한 이유를 제시합니다.
ESLint 및 기타 언어 서비스에 대한 머신 논리를 약화시켜 내부 스코프가 선언하는 것을 잊은 외부 스코프 변수 이름의 재사용과 이후 할당에서 잘못 입력된 변수 이름을 올바르게 검출합니다.
또한 실행 시간이 모든 코드 패스에 대해 여러 번 반복 실행되도록 하여 실제로는 상수임을 탐지한 다음 최적화할 수 있습니다.이것은 버그 검출이나 개발자의 이해력보다 문제가 적습니다.
「 」를 const
에서 참조 되지 않는 올바른 은 "알겠습니다"입니다.const
하기 때문에 을 의미합니다. 객체의 경우 참조 값을 변경하는 것은 참조는 불변하지만 객체는 불변하기 때문에 다른 객체를 가리키는 것을 의미합니다.
const
할 수 만, 는 다른 오브젝트로 변경할 수 .const
선언은 변경할 수 있습니다.아이템을 추가 또는 삭제할 수 있습니다.const
해, 「중요」, 「중요」의합니다.const
참조되는 오브젝트
의 오브젝트말해 추론할 수 있도록 )를 실현하려면 , 「불변의 오브젝트」를 합니다.Object.freeze
다음과 같이 말합니다.
const Options = Object.freeze(['YES', 'NO'])
Object.freeze는 성능에 영향을 미치지만 다른 이유로 인해 코드가 느릴 수 있습니다.프로파일링하고 싶으시군요
또한 상태 시스템에서 변경 가능한 개체를 캡슐화하고 전체 복사본을 값으로 반환할 수 있습니다(이것이 Redux 및 React 상태 작동 방식).첫 번째 원칙에서 이를 구축하는 방법의 예는 브라우저 JS에서 가변 글로벌 상태 방지를 참조하십시오.
var
★★★★★★★★★★★★★★★★★」let
이 맞다
let
★★★★★★★★★★★★★★★★★」var
가변 상태를 나타냅니다.제 생각에는, 그것들은 실제 변이 상태를 모델링하는 데만 사용되어야 합니다.'연결이 살아있어?' 이런 거.
이러한 값은 테스트 가능한 상태 머신에 캡슐화되어 있습니다.테스트 가능한 상태 머신에서는 "접속 현재 상태"를 나타내는 상수 값이 표시됩니다.이것은 임의의 시점에서 상수이며, 나머지 코드는 실제로 무엇을 필요로 하는지를 나타냅니다.
프로그래밍은 이미 부작용 합성 및 데이터 변환으로 충분히 어렵습니다.복잡성에 변수가 쌓이는 가변 상태를 만들어 모든 기능을 테스트할 수 없는 상태 기계로 전환합니다.
상세한 것에 대하여는, 「Shun the Mutrent - The case for 」를 참조해 주세요.
요점은 개발 중에 어떤 식별자를 사용해야 하는지 결정하는 방법입니다.
JavaScript에는 세 가지 식별자가 있습니다.
- var(재신고 및 재초기화 가능)
- const (재신고 및 재초기화는 불가하며 push를 사용하여 어레이 값을 갱신할 수 있음)
- let (재초기화는 가능하지만 재초기화는 불가)
'var' : 코드 표준에 대해 이야기할 때 보통 다른 사용자나 개발자가 알기 쉬운 식별자 이름을 사용합니다.
예를 들어, 작업 중에 다음과 같이 입력을 사용하고 이를 처리하여 결과를 반환하는 여러 함수를 생각할 수 있습니다.
변수 사용 예제
function firstFunction(input1, input2)
{
var process = input1 + 2;
var result = process - input2;
return result;
}
function otherFunction(input1, input2)
{
var process = input1 + 8;
var result = process * input2;
return result;
}
위의 예에서는 두 함수가 모두 다른 2개의 결과를 생성하지만 변수 이름은 동일합니다.여기에서는 'process'와 'result'가 모두 변수로 사용되고 있음을 알 수 있습니다.
변수가 있는 상수 예제
const tax = 10;
const pi = 3.1415926535;
function firstFunction(input1, input2)
{
var process = input1 + 2;
var result = process - input2;
result = (result * tax)/100;
return result;
}
function otherFunction(input1, input2)
{
var process = input1 + 8;
var result = process * input2 * pi;
return result;
}
JavaScript에서 'let'을 사용하기 전에 JavaScript 파일 상단에 'use strict'를 추가해야 합니다.
상수 & 변수 포함 let 예제
const tax = 10;
const pi = 3.1415926535;
let trackExecution = '';
function firstFunction(input1, input2)
{
trackExecution += 'On firstFunction';
var process = input1 + 2;
var result = process - input2;
result = (result * tax)/100;
return result;
}
function otherFunction(input1, input2)
{
trackExecution += 'On otherFunction'; # Can add current time
var process = input1 + 8;
var result = process * input2 * pi;
return result;
}
firstFunction();
otherFunction();
console.log(trackExecution);
위의 예에서는 특정 작업 중에 어떤 기능이 실행되었는지, 어떤 기능이 사용되지 않았는지 추적할 수 있습니다.
세 점, 세 가지가 .const
하는 범위 )let
- 이것은 나중에 코드를 읽는 사람들을 위해 값이 변경되지 않아야 한다는 것을 문서화합니다.
- 사용자(또는 사용자 뒤에 오는 사용자)가 의도적으로 선언을 변경하지 않는 한 값을 변경할 수 없습니다.
- 최적화 측면에서 JavaScript 엔진에 분석을 저장할 수 있습니다.예를 들어, 사용자가 값을 변경할 수 없다고 선언했기 때문에 엔진은 값이 변경되는지 여부를 파악하기 위해 작업을 수행할 필요가 없습니다. 따라서 이 값을 변경하지 않고 최적화할지 여부를 결정할 수 있습니다.
질문:
요?
const
var
값이 변경되지 않는 변수를 선언할 때는 언제든지 이 작업을 수행할 수 있습니다.그것이 적절하다고 생각되는지는 전적으로 당신의 취향이나 팀의 취향에 달려 있습니다.
재할당되지 않는 변수가 선언될 때마다 사용해야 합니까?
그건 당신이나 당신 팀에 달렸어요.
'아예'와 '아예'가 요?
var is used in place of
const? 니? ????
네:
var
★★★★★★★★★★★★★★★★★」const
(비교해보고 )let
var
):const
★★★★★★★★★★★★★★★★★」let
는 블록 범위이며 글로벌스코프에서 사용되는 경우 글로벌오브젝트에 속성을 작성하지 않습니다(글로벌 작성은 가능하더라도).var
에는 글로벌스코프(글로벌스코프에서 사용되는 경우) 또는 기능스코프(블록에서 사용되는 경우라도)가 있으며 글로벌스코프에서 사용되는 경우 글로벌오브젝트에 속성이 생성됩니다.- 위의 "세 가지 유용한 사항"을 참조하십시오. 이 질문에는 모두 해당됩니다.
다음과 같은 기능이 있습니다.
참조 를를 、 속 a a 、 a a a, a a)
const x = []
할 수 - 할 수 없습니다.x
배열을 수 ; 다른 배열을 가리킬 수 없습니다.블록 스코핑
const
★★★★★★★★★★★★★★★★★」let
함께 대체하다var
ECMAScript 6/2015에 수록되어 있습니다.jet 및 const를 사용한 JavaScript ES6 변수 선언의 설명을 참조하십시오.
let과 const(두 블록 모두 스코프)의 결정에 관해서는 항상 const를 우선하여 코드에서 사용현황이 명확하도록 합니다.따라서 변수를 다시 선언하려고 하면 오류가 발생합니다.재신고를 하는 것 외에 다른 방법이 없다면 그냥 세대로 바꾸세요.Anthony가 말한 것처럼 const 값은 불변하지 않습니다(예를 들어 const 객체는 속성을 변환하는 경우가 있습니다).
var라고 하면 ES6가 출시되어 있기 때문에 프로덕션 코드에 사용한 적이 없기 때문에 사용 사례가 생각나지 않습니다.이것을 사용하는 것을 고려할 수 있는 한 가지 포인트는 JavaScript hoosting입니다.- let 및 const는 hoost되지 않지만 var declaration은 hoost 됩니다.단, var로 선언된 변수에는 블록스코프가 아닌 함수스코프가 있는 것에 주의해 주십시오('모든 함수 외부에서 선언된 경우 프로그램 전체에서 글로벌하게 사용할 수 있습니다.함수 내에서 선언된 변수는 HackerRank - Variable Declaration Keywords'에서 함수 자체 내에서만 사용할 수 있습니다).let은 블록 범위 버전의 var로 생각할 수 있습니다.
'const'는 식별자가 재할당되지 않음을 나타내는 코드입니다.
이것은 언제 'const', 'let', 'var'를 사용해야 하는지에 대한 좋은 기사입니다. JavaScript ES6+: var, let, const?
JavaScript 컴파일 비즈니스 전문가는 아니지만 V8에서 const 플래그를 사용하는 것은 타당합니다.
일반적으로 여러 변수를 선언하고 변경한 후 메모리가 조각화되고 V8이 실행을 중지하거나 몇 초 동안 일시 중지하여 가비지 수집 또는 가비지 수집을 만듭니다.
변수가 const로 선언된 경우 변수는 변경되지 않으므로 V8은 다른 const 변수 사이에 단단히 고정된 크기의 컨테이너에 넣을 수 있습니다.
또한 유형이 변경되지 않으므로 해당 데이터 유형에 대한 적절한 작업을 저장할 수도 있습니다.
제 의견:
Q. 언제 사용하는 요?const
var
A. 대!!
Q: 재할당되지 않는 변수가 선언될 때마다 사용해야 합니까?
A: 대!! 하면 이 줄어드니까..." " " " " " " " " 」 。
Q. 만약 그렇다면 실제로 어떤 차이가 있나요?var
.const
니면부??? ??
A: !! a법 a!var
★★★★★★★★★★★★★★★★★! )var
하지 않고const
-const
하려 하고 있다var
은(는)...)
가가A: 일일 extra extra 。let
입니다. - 왜 . JavaScript? - ?const
?잇!
언급URL : https://stackoverflow.com/questions/21237105/const-in-javascript-when-to-use-it-and-is-it-necessary
'programing' 카테고리의 다른 글
php: 어레이 키 케이스 *insensitive* lookup? (0) | 2023.01.08 |
---|---|
입력 유형=범위를 변경하는 이벤트가 끌 때 Firefox에서 트리거되지 않음 (0) | 2023.01.08 |
JTable 삽입 후 테이블 모델을 새로 고치는 방법 데이터 삭제 또는 업데이트 (0) | 2023.01.08 |
IPv4, IPv6 주소를 문자열로 저장하는 크기 (0) | 2023.01.08 |
MySQL 매개 변수화된 쿼리 (0) | 2023.01.08 |