크레인 크레인
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와 constES6를 주었다!우리가 사용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.)