최근에 저는 Ruan Yifeng 선생님의 ES 표준 소개를 읽고 있었는데, 첫 번째 장을 읽을 때 코드 조각을 언급했습니다
으아악여기서 let을 사용하면 이 문제를 해결할 수 있지만, ES5 방식을 사용하면 어떨까요? IIFE는 그것을 할 수 있지만 즉시 인쇄합니다.
巴扎黑2017-06-28 09:24:57
사용자 정의 속성을 사용할 수 있습니다
var a = [];
for (var i = 0; i < 10; i++) {
}
a[6]() // 6
曾经蜡笔没有小新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을 출력한 결과도 얻을 수 있습니다.
天蓬老师2017-06-28 09:24:57
클로저를 사용할 수 있습니다
http://www.softwhy.com/articl...
이 글의 후반부에서는 이미 질문에 대해 설명했습니다