크레인 크레인

4951 단어
JavaScript를 처음 사용하는 사람에게는 향상이 어려운 개념일 수 있습니다.기중의 방식과 원인을 토론하기 전에 기중이 실제로 무엇인지 살펴보자.간단히 말하면:
Hoisting is JavaScript's default behavior of moving all declarations to the top of their scope before the code is executed.
리프트는 선언하기 전에 함수를 사용할 수 있도록 처음에 JavaScript에 기록되었으나 변수 리프트는 해당 기능의 부산물일 뿐입니다.
왜 우리는 심지어 함수를 성명하기 전에 그것들을 사용해야 합니까?
  • 서로 돌아가는 일에 필요한 또 다른 주제다.
  • 어떤 사람들은 이렇게 코드를 쓰는 것이 더 깨끗해 보인다고 생각한다.(동의합니다!)
  • 많은 사람들이 승진이 실제로는 코드를 이동할 것이라고 생각하지만, 자바스크립트는 실행하기 전에 코드만 읽는다.이 단계를 번역이라고 한다.JavaScript는 코드의 각 선언을 고려하여 실행하기 전에 해당 선언을 알고 있습니다.

    변량

    var는 함수 작용역이다. 우리가 var를 사용하여 변수를 정의할 때 그것들은 컴파일하는 동안 그 작용역의 맨 위로 올라가 변수가 어디에서 성명되든지 상관없다.우리가 var의 작용역을 토론할 때 중요한 것은 작용역이 전역적이거나 함수의 꼭대기를 정의하는 것이다.설령 이 변수가 조건이나 순환에서 성명된다 하더라도.그러나 이것은 성명에만 적용되고 양도에는 적용되지 않는다.다음 예는 다음과 같습니다.
    console.log(yearBorn)
    var yearBorn = 1990
    
    당신은 이 코드가 컨트롤러에 로그인할 것이라고 생각합니까?

    만약 네가 맞혔다면undefined 네가 맞았어!이는 JavaScript가 값을 지정하는 대신 선언만 올리기 때문입니다.이것은 유용한 잘못이 아니다.그것은 버그를 발견하고 복구하기 어려울 것이다.
    고맙게도 자바스크립트가 우리letconstES6를 주었다!우리가 사용letconst로 얻은 오류는 일반적인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


    이제 우리는 letconst가 무엇인지, 그들이 무엇을 했는지 알게 되었다. 우리는 범위와 향상된 상하문에서 그것들을 토론할 수 있다.letconst는 모두 블록의 범위이다. 이것은 그것들이 그것들을 성명하는 블록에만 존재한다는 것을 의미한다.이것은 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 두 팔을 벌리고 환영letconst 코드를 넣는다.
    다음은 작은 펜던트 장비 잊기:

    변량

  • 이미 조립했습니까?맞다
  • 초기값: 정의되지 않음
  • 범위: 기능
  • let&const

  • 이미 조립했습니까?아니오(기술적으로는 그렇지만 실제로는 아님)
  • 초기값: *
  • 범위: 청크
  • 함수 설명

  • 이미 조립했습니까?맞다
  • 초기값: 실제 함수
  • Scope: Block'strict' 모드를 사용하는 경우에만 해당됩니다.
  • 함수 표현식과 화살표 함수

  • 이 예에서 이것은 그것들이 사용하느냐var, let느냐, 아니면 const성명하느냐에 달려 있다.그것들의 행위 방식은 변수가 이 성명들을 처리하는 방식과 같다.
  • 이것은 상당히 광범위하고 간단한 해석이다.도움이 됐으면 좋겠어요!

    좋은 웹페이지 즐겨찾기