이 문제를 일으킨 것은 JS 프로그램을 실행 한 결과입니다.
코드 사본은 다음과 같습니다.
var i = 0;
기능 a () {
for (i = 0; i <20; i ++) {
}
}
함수 b () {
for (i = 0; i <3; i ++) {
에이();
}
반환 i;
}
var result = b ();
이 프로그램 실행의 결과는 결과 = 21입니다.
이 프로그램에서 우리는 기능이 반환 될 때 i의 값이 20이라는 데 문제가 없음을 알 수 있습니다.
B 기능이 반환되면 i의 값이 20 또는 21인지 논의 할 가치가 있습니다.
문제의 본질은 다음과 같습니다. 먼저 i <3 또는 i ++가 먼저 수행되는지 여부를 결정한 다음 i <3을 결정합니다.
실행 결과에 따르면, I ++가 먼저 실행되었음을 알 수 있습니다.
코드 사본은 다음과 같습니다.
기능 a () {
for (i = 0; i <20; i ++) {
// var i
// I HERE는 모든 사람이 액세스 할 수있는 글로벌 변수입니다.
}
}
함수 b () {
for (i = 0; i <3; i ++) {
// Alert (i); // 마찬가지로, 여기에 나도 여기에 전역 변수가 있습니다.
a (); //이 함수는 i = 20을 반환합니다
// i = 20이 I ++와 i = 21을 통과하면 i <3의 조건을 충족하지 않고 직접 종료하지 않습니다. 그래서 반환 i = 21 이것은 정상입니다!
}
반환 i;
}
var result = b ();
여기서 우리는 for 루프의 실행 순서를 완료합니다.
다음 프로그램이 예입니다
코드 사본은 다음과 같습니다.
for (int i = 0; i <10; i ++)
{
}
먼저 i = 0; i <10; 그런 다음 첫 번째 루프 본체를 수행하십시오
그런 다음 실행 : i ++, i <10; 그런 다음 루프 바디의 두 번째 라운드를 실행하십시오
i> = 10 이후 마지막 i ++까지 루프가 종료됩니다.
지금 바로
루프 (코드 블록)가 시작되기 전에 진술 1이 실행됩니다.
명령문 2 루프 실행 조건 (코드 블록)
루프 (코드 블록)가 실행 된 후 명령문 3이 실행됩니다.