찾다

 >  Q&A  >  본문

js 클로저 범위

왜 10번이 출력되나요? 10이 1~9로 출력되어야 하는 것 아닌가요? 이 함정에 대한 답을 주세요

으아악
扔个三星炸死你扔个三星炸死你2730일 전772

모든 응답(8)나는 대답할 것이다

  • 黄舟

    黄舟2017-06-28 09:30:39

    for 루프가 실행될 때 i 값을 저장하는 클로저 함수만 생성하면 순차적으로 출력될 수 있습니다

    으아악

    회신하다
    0
  • 阿神

    阿神2017-06-28 09:30:39

    으아악

    과거에 읽은 기사
    클로저를 이해하려면 코드를 작성한 다음 이를 자신의 코드에 사용해야 합니다. 그 외에는 암기해야만 합니다.
    고대 중국인들은 아이들이 아주 어릴 때 물건을 가지고 다니는 것을 좋아하지만 그것이 무엇을 의미하는지 모르고 때로는 명확하게 설명할 수 없는 경우도 있습니다. future
    위의 내용
    이 있다면 제가 작성한 로그를 읽어 보시는 것이 좋습니다. 그래도 이해가 안 되신다면
    http://user.qzone.qq로 메시지를 남겨주세요. .com/2084...

    회신하다
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-28 09:30:39

    으아악

    회신하다
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

    으아악

    각각의 i는 동일한 외부 i, 즉 10을 나타냅니다

    회신하다
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

    으아악

    var 변수의 범위는 블록 수준 범위가 아닌 함수 범위입니다

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-06-28 09:30:39

    스코프 체인이 생성될 때 생성되었습니다. c[i] = function(i){ return i; };실행하면 현재 스코프에는 i가 없으며, 상위 스코프 save_i()의 i가 10이 되었습니다. 결과가 0~9라고 생각하시나요? 상위 범위가 전역 범위라고 생각하시나요?

    회신하다
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

    a[i]는 할당될 때 함수 묶음입니다. 즉, 실행되지도 않고 i를 얻지도 않으며 해당 범위도 i를 얻지 못합니다

    아래에서 실행하면 이 함수 묶음은 루프가 실행된 후 10인 자체 범위에서 얻을 수 있는 i를 찾기 시작합니다

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:30:39

    var 키워드는 변수 범위를 함수 범위로 선언하므로 for 루프의 i 변수가 승격됩니다. 포스터가 for 루프의 섹션을 자체 실행 기능으로 변경하면 문제가 없습니다. 예:
    함수 save_i(){

    으아악

    }

    회신하다
    0
  • 취소회신하다