javascript - ES6 표준 소개의 let 명령에서 언급한 for 루프 인쇄는 10입니다. let 없이 어떻게 교체할 수 있나요?
阿神
阿神 2017-06-28 09:22:57
0
4
909

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

으아악

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

阿神
阿神

闭关修行中......

모든 응답(4)
扔个三星炸死你

으아악

폐쇄 문제

巴扎黑

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

으아악

}
a[6]() // 6

;
曾经蜡笔没有小新

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

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

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

으아악

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

질문자님 말씀은

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

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

으아악

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

Peter_Zhu

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿