그런데 질문하신 내용이 원하는 내용과 완전히 일치하지 않는 것 같습니다. 질문 설명을 변경하는 데 도움을 드리고 싶지만 조금 무기력합니다...
이것은 실제로 폐쇄 문제입니다. 먼저 10이 출력되는 이유를 분석해 보겠습니다.
으아악
의 값은 10이므로 10이 출력됩니다.for里面的i的作用于是整个外部区域,所以,当调用a[6]()的时候,其实运行的是console.log(i),而此时因为跑完循环,i
질문자님 말씀은
해결이 가능합니다. 왜냐하면for에서let可以解决,是因为,for里面,let声明的变量,作用于只在for内部,所以,不会因为循环跑完而使得i에서 선언한 변수는for내부에서만 사용되기 때문에 루프로 인해 실행되지 않기 때문입니다. . 이는 전역 범위에서i를 10과 동일하게 만듭니다.
사실 이 질문이 실제로 조사하는 것은 종결이어야 합니다.
으아악
클로저의 역할은 외부 변수 값을 오염시키지 않고 지역 변수를 서로 격리하는let의 이전 역할과 유사합니다. 각 클로저는 독립적인 영역이며 클로저 매개변수는 클로저 내부에서만 사용되므로 6을 출력한 결과도 얻을 수 있습니다.
으아악
폐쇄 문제
사용자 정의 속성을 사용할 수 있습니다
으아악var a = [];
for (var i = 0; i < 10; i++) {
}
;a[6]() // 6
이건 질문자가 6을 출력하고 싶어하는 것 같은데요?
그런데 질문하신 내용이 원하는 내용과 완전히 일치하지 않는 것 같습니다. 질문 설명을 변경하는 데 도움을 드리고 싶지만 조금 무기력합니다... 이것은 실제로 폐쇄 문제입니다. 먼저 10이 출력되는 이유를 분석해 보겠습니다.let
으아악
의 값은 10이므로 10이 출력됩니다.
질문자님 말씀은for
里面的i
的作用于是整个外部区域,所以,当调用a[6]()
的时候,其实运行的是console.log(i)
,而此时因为跑完循环,i
해결이 가능합니다. 왜냐하면
for
에서let
可以解决,是因为,for
里面,let
声明的变量,作用于只在for
内部,所以,不会因为循环跑完而使得i
에서 선언한 변수는for
내부에서만 사용되기 때문에 루프로 인해 실행되지 않기 때문입니다. . 이는 전역 범위에서i
를 10과 동일하게 만듭니다.사실 이 질문이 실제로 조사하는 것은 종결이어야 합니다.
으아악클로저의 역할은 외부 변수 값을 오염시키지 않고 지역 변수를 서로 격리하는
let
의 이전 역할과 유사합니다. 각 클로저는 독립적인 영역이며 클로저 매개변수는 클로저 내부에서만 사용되므로 6을 출력한 결과도 얻을 수 있습니다.클로저를 사용할 수 있습니다
http://www.softwhy.com/articl...
이 글의 후반부에서는 이미 질문에 대해 설명했습니다