이 질문을 촉발한 것은 js 프로그램의 실행 결과였습니다.
var i = 0;
함수 a(){
for(i=0;i}
}
함수 b(){
for (i=0;i<3;i ){
a();
}
return i;
}
var Result = b()
이 프로그램의 실행 결과는 Result = 21;
이 프로그램에서 함수 a가 반환될 때 i의 값이 20임을 알 수 있으며 이는 문제가 되지 않습니다.
b 함수가 반환될 때 i의 값이 20인지 21인지는 논의할 가치가 있습니다.
문제의 본질은 i<3인지, i를 먼저 판단하고, 그 다음에 i<3인지 판단하는 것입니다.
실행 결과에 따르면, 먼저 처형됐다.
function a(){
for (i= 0;i<20;i ){
// var i가 없습니다
//여기의 i는 누구나 접근할 수 있는 전역 변수입니다
}
}
함수 b(){
for(i=0;i<3;i ){
//alert(i);//마찬가지로, i도 전역 변수로, 0을 한 번만 반환합니다.
a();// 이 함수의 반환 값은 i=20입니다.
//i=20이 i를 통과한 다음 i=21이면 i<3 조건이 충족되지 않고 바로 종료됩니다. 따라서 i=21을 반환하면 이는 정상입니다!
}
return i;
}
var Result = b();
여기서 for 루프의 실행 순서를 완성합니다.
프로그램 예를 들어
for(int i= 0;i<10 ;i )
{
}
먼저 i=0;i<10;을 실행한 다음 루프의 첫 번째 라운드를 실행하고
실행합니다. : i ,i<10; 그런 다음 마지막 i 이후 i >= 10이 될 때까지 루프 본문
의 두 번째 라운드를 실행합니다. 이 지점에서 루프가 종료됩니다.
즉,
문 1은 루프(코드 블록)가 시작되기 전에 실행됩니다.
문 2는 루프(코드 블록)를 실행하기 위한 조건을 정의합니다. >
문 3은 루프(코드 블록)가 실행된 후 실행됩니다.