JS: VAR, LET, CONST feat. 게양
18714 단어 tutorialbeginnersjavascript
이 글을 읽고 계신다면 아마 흥미진진한(❓😅) Javascript 세계로의 여행을 막 시작하셨거나 재충전을 위해 다시 돌아오셨을 것입니다. 바로 🆗입니다!
var, let 및 const의 차이점을 이해하는 것은 Javascript를 배울 때 가장 먼저 접하게 되는 것 중 하나일 것입니다. 하지만 먼저... 게양.
게양
"호이스팅"이라고 하면 변수나 함수가 코드의 "맨 위로 가져오는"경우를 말합니다. "brought to the top"주변의 따옴표에는 이유가 있습니다. 코드가 실제로 이동되는 것이 아니라 단순히 메모리에 추가되어 한 줄의 코드가 실제로 실행되기 전에 코드가 변수와 함수에 대해 알 수 있습니다. 코드는 변수나 함수를 실행하거나 평가합니다. 코드는 이미 그것에 대해 알고 있고/당신이 그것을 만들었다는 것을 알고 있습니다. 이것이 우리가 다음과 같은 일을 할 수 있는 이유입니다.
귀하의 코드
sayName("Mike")
function sayName(name){
console.log("My dog's name is" + name)
}
// returns "My dog's name is Mike"
귀하의 코드 해석
//function sayName is hoisted("brought to the top") here.. to the top of your code
sayName("Mike") //allowing you to use it here, even though the function itself is below it
function sayName(name){
console.log("My dog's name is" + name)
}
// returns "My dog's name is Mike"
참고: 변수 DECLARATIONS만 호이스팅됩니다. 변수는 초기화되지 않고 실행 시 값이 주어질 때까지 값을 가지지 않습니다. 아래 코드 스니펫을 확인하십시오.
귀하의 코드
var firstName = "Mike"
console.log(`My name is ${firstName} ${lastName}.`)
var lastName = "Smith"
귀하의 코드 해석
//firstName and lastName declarations are hoisted("brought to the top") here
var firstName = "Mike"
console.log(`My name is ${firstName} ${lastName}.`)
// returns "My name is Mike undefined" as lastName was not initialized with "Smith" yet, but
// your code knows it exists / was declared.
**//Note: for let and const declarations, lastName will trigger a ReferenceError and will NOT
//return undefined as it did with var declaration**
var lastName = "Smith"
console.log(`My name is ${firstName} ${lastName}.`)
//returns "My name is Mike Smith" because lastName was finally initialized / given a value
그것이 변수든 함수든 항상 그것이 정의된 컨텍스트/범위의 "맨 위로 가져옵니다"(호이스트됨). 함수 또는 블록, 그래서 우리의 변수와 함수는 다른 함수나 블록 내부가 아닌 전역적으로 호이스팅되었습니다(참고: var는 블록 범위가 아니며 전역 또는 기능 범위일 뿐입니다) 의미:
var dogName = "Mike"
function sayName(name){
var owner = "Tony"
console.log("The name of " + owner +"'s dog is " + name)
}
console.log(dogName)
// returns "Mike"
console.log(owner)
// ReferenceError: owner is not defined
// ^ this because owner is only accessible / scoped to inside of our sayName function
sayName(dogName)
// returns "The name of Tony's dog is Mike"
if (dogName === "Mike"){
var dogName = "Lucas"
// remember that var is NOT block scoped, so we are actually reassigning dogName here
}
//SO....
sayName(dogName)
//returns "The name of Tony's dog is Lucas"
휴. 확인..
🥁 모두가 기다려온 순간
ES6부터는 이제 변수에 대해 let과 const라는 두 가지 다른 선언을 사용할 수 있습니다. 그것들은 var와 유사하지만 위에서 본 것처럼 var와 함께 제공되는 많은 까다로운 부분으로부터 우리를 보호합니다.
TLDR: VAR, LET 및 CONST의 차이점
VAR
재선언 가능
var five = "five"
var five = "five, but a new five :)"
// no errors
재할당 가능
var five = "five"
five = "five, but a new five :)"
console.log(five) // returns "five, but a new five :)"
//no errors
허락하다
블록 범위
let dogName = "Mike"
if (dogName === "Mike"){
let dogName = "Lucas" // this is NOT THE SAME / NOT overwriting dogName from above!
console.log(dogName) // returns "Lucas"
// dogName inside of the if-statement is block scoped.
}
console.log(dogName)
//returns "Mike" since we are out of the if-statement and referring to the first dogName
재선언할 수 없다
let five = "five"
let five = "five, but a new five :)"
//SyntaxError: Identifier 'five' has already been declared
재할당 가능
let five = "five"
five = "five, but a new five :)"
console.log(five) // returns "five, but a new five :)"
//no errors
CONST
블록 범위
const dogName = "Mike"
if (dogName === "Mike"){
const dogName = "Lucas" // this is NOT THE SAME / NOT overwriting dogName from above!
console.log(dogName) // returns "Lucas"
// dogName inside of the if-statement is block scoped.
}
console.log(dogName)
//returns "Mike" since we are out of the if-statement and referring to the first dogName
재선언할 수 없다
const five = "five"
const five = "five, but a new five :)"
//SyntaxError: Identifier 'five' has already been declared
재할당할 수 없음
const five = "five"
five = "five, but a new five :)"
//TypeError: Assignment to constant variable
돌연변이 가능
const numbers = [1,2,3,4]
// 🚫 this doesn't work
const numbers = [4,3,2,1]
// returns Uncaught SyntaxError: Identifier 'numbe' has already been declared
// 🚫 neither does this
numbers = numbers = [4,3,2,1]
// returns Uncaught TypeError: Assignment to constant variable.
// ✅ but this does
numbers.push(5)
console.log(numbers) // returns [1,2,3,4,5]
//Same for Objects
const idCard = {
firstName: "Tony",
lastName: "Smith",
}
// 🚫 this will not work.. returns TypeError: Assignment to constant variable.
idCard = {
firstName: "Mike",
lastName: "Jordan",
}
// ✅ this works
idCard.firstName = "Tom"
idCard.eyeColor = "blue"
console.log(idCard)
//returns { firstName: 'Tom', lastName: 'Smith', eyeColor: 'blue' }
항상 그렇듯이 자세한 내용은 MDN을 참조하세요.
게양: https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
VAR: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var
하자: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
구성: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
질문, 피드백(좋은 것과 나쁜 것)이 필요하거나 연결/안녕하세요 👋에 대해 제 소셜에 자유롭게 연락하세요.
Reference
이 문제에 관하여(JS: VAR, LET, CONST feat. 게양), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/antdp425/var-let-and-const-feat-hoisting-3o28텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)