크레인 크레인
Hoisting is JavaScript's default behavior of moving all declarations to the top of their scope before the code is executed.
리프트는 선언하기 전에 함수를 사용할 수 있도록 처음에 JavaScript에 기록되었으나 변수 리프트는 해당 기능의 부산물일 뿐입니다.왜 우리는 심지어 함수를 성명하기 전에 그것들을 사용해야 합니까?
변량
var
는 함수 작용역이다. 우리가 var
를 사용하여 변수를 정의할 때 그것들은 컴파일하는 동안 그 작용역의 맨 위로 올라가 변수가 어디에서 성명되든지 상관없다.우리가 var
의 작용역을 토론할 때 중요한 것은 작용역이 전역적이거나 함수의 꼭대기를 정의하는 것이다.설령 이 변수가 조건이나 순환에서 성명된다 하더라도.그러나 이것은 성명에만 적용되고 양도에는 적용되지 않는다.다음 예는 다음과 같습니다.console.log(yearBorn)
var yearBorn = 1990
당신은 이 코드가 컨트롤러에 로그인할 것이라고 생각합니까?만약 네가 맞혔다면
undefined
네가 맞았어!이는 JavaScript가 값을 지정하는 대신 선언만 올리기 때문입니다.이것은 유용한 잘못이 아니다.그것은 버그를 발견하고 복구하기 어려울 것이다.고맙게도 자바스크립트가 우리
let
와 const
ES6를 주었다!우리가 사용let
과const
로 얻은 오류는 일반적인oleundefined
보다 훨씬 유용하다.콘스트
const
는 식별자를 재분배할 수 없음을 나타낸다.그것들은 변하지 않는 값을 유지해서 갱신하거나 재성명할 수 없다.예를 들어 퇴근해서 집에 돌아와서 아주 맛있는 저녁을 할 계획이라고 가정해 보세요.사실은 네가 오늘 어쩔 수 없이 밤을 새워야 한다는 것을 증명한다. 특별한 저녁을 할 시간이나 정력이 없다.const dinner = "Beef Wellington"
dinner = "Frozen Pizza"
console.log(dinner)
// Uncaught TypeError: Assignment to constant variable.
이렇게 하는 것도 우리에게 문제를 가져올 수 있다.const dinner = "Beef Wellington"
const dinner = "Frozen Pizza"
console.log(dinner)
// Uncaught SyntaxError: Identifier 'dinner' has already been declared
이것은 const
이 나쁜 일이라는 것을 의미하지 않는다!우리는 가치관이 재분배되거나 성명되지 않도록 하기 위해 중요한 가치관이 있을 수 있다.구체적인 공식이나 숫자는 단지 몇 가지 예일 뿐이다.const
에 관해서는 주의할 점이 하나 더 있다. const
로 성명한 변수의 값이 수조나 대상이라면 그 속성을 업데이트할 수 있다.성명된 변수가 언제 다시 정의될지 모르면 const
를 사용하는 것이 좋습니다.이것은 우리로 하여금 생각하게 한다let
!양보하다
저녁 식사의 예로 돌아가자.
let dinner = "Beef Wellington"
dinner = "Frozen Pizza"
console.log(dinner)
// Frozen Pizza
let, const 및 lifting
이제 우리는
let
와 const
가 무엇인지, 그들이 무엇을 했는지 알게 되었다. 우리는 범위와 향상된 상하문에서 그것들을 토론할 수 있다.let
와 const
는 모두 블록의 범위이다. 이것은 그것들이 그것들을 성명하는 블록에만 존재한다는 것을 의미한다.이것은 var
와 다른 점은 let
또는 const
로 변수를 성명하면 그 작용역의 맨 위로 올라갈 것이다. 이 작용역은 전역적, 함수적 또는 코드 블록 내부, 예를 들어 조건이나 순환 등이 될 수 있다.let ingredients = ["Spaghetti", "Meatballs", "Garlic Bread"]
function makeDinner(ingredients) {
let firstIngredient = ingredients[0]
if (firstIngredient.length > 5) {
let longIngredient = true
}
return longIngredient;
}
console.log(makeDinner(ingredients))
// Uncaught ReferenceError: longIngredient is not defined
console.log(firstIngredient)
// Uncaught ReferenceError: firstIngredient is not defined
우리가 저녁을 하기 전에 식재료를 수집하는 것을 잊었다고 적힌 코드를 잊어버리자.function makeDinner(ingredients) {
var firstIngredient = ingredients[0]
if (firstIngredient.length > 5) {
var longIngredient = true
}
return longIngredient;
}
console.log(makeDinner(ingredients))
let ingredients = ["Spaghetti", "Meatballs", "Garlic Bread"]
// Uncaught ReferenceError: Cannot access 'ingredients'
before initialization
및 var
:...
console.log(makeDinner(ingredients))
var ingredients = ["Spaghetti", "Meatballs", "Garlic Bread"]
// Uncaught TypeError: Cannot read property '0' of undefined
요컨대 잊어버리고var
두 팔을 벌리고 환영let
과const
코드를 넣는다.다음은 작은 펜던트 장비 잊기:
변량
let&const
함수 설명
'strict'
모드를 사용하는 경우에만 해당됩니다.함수 표현식과 화살표 함수
var
, let
느냐, 아니면 const
성명하느냐에 달려 있다.그것들의 행위 방식은 변수가 이 성명들을 처리하는 방식과 같다.Reference
이 문제에 관하여(크레인 크레인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/arynnboniface/javascript-and-hoisting-495텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)