>  Q&A  >  본문

javascript - ES6 표준 소개의 let 명령에서 언급한 for 루프 인쇄는 10입니다. let 없이 어떻게 교체할 수 있나요?

최근에 저는 Ruan Yifeng 선생님의 ES 표준 소개를 읽고 있었는데, 첫 번째 장을 읽을 때 코드 조각을 언급했습니다

으아악

여기서 let을 사용하면 이 문제를 해결할 수 있지만, ES5 방식을 사용하면 어떨까요? IIFE는 그것을 할 수 있지만 즉시 인쇄합니다.

阿神阿神2694일 전867

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

  • 扔个三星炸死你

    扔个三星炸死你2017-06-28 09:24:57

    으아악

    폐쇄 문제

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:24:57

    사용자 정의 속성을 사용할 수 있습니다
    var a = [];
    for (var i = 0; i < 10; i++) {

    으아악

    }
    a[6]() // 6

    ;

    회신하다
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-28 09:24:57

    이건 질문자가 6을 출력하고 싶어하는 것 같은데요? let

    그런데 질문하신 내용이 원하는 내용과 완전히 일치하지 않는 것 같습니다. 질문 설명을 변경하는 데 도움을 드리고 싶지만 조금 무기력합니다...

    이것은 실제로 폐쇄 문제입니다. 먼저 10이 출력되는 이유를 분석해 보겠습니다.

    으아악

    의 값은 10이므로 10이 출력됩니다. for里面的i的作用于是整个外部区域,所以,当调用a[6]()的时候,其实运行的是console.log(i),而此时因为跑完循环,i

    질문자님 말씀은

    해결이 가능합니다. 왜냐하면 for에서 let可以解决,是因为,for里面,let声明的变量,作用于只在for内部,所以,不会因为循环跑完而使得i에서 선언한 변수는 for 내부에서만 사용되기 때문에 루프로 인해 실행되지 않기 때문입니다. . 이는 전역 범위에서 i를 10과 동일하게 만듭니다.

    사실 이 질문이 실제로 조사하는 것은 종결이어야 합니다.

    으아악

    클로저의 역할은 외부 변수 값을 오염시키지 않고 지역 변수를 서로 격리하는 let의 이전 역할과 유사합니다. 각 클로저는 독립적인 영역이며 클로저 매개변수는 클로저 내부에서만 사용되므로 6을 출력한 결과도 얻을 수 있습니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-06-28 09:24:57

    클로저를 사용할 수 있습니다
    http://www.softwhy.com/articl...
    이 글의 후반부에서는 이미 질문에 대해 설명했습니다

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