찾다

 >  Q&A  >  본문

분석해 보세요 | 이 JavaScript 코드의 출력이 5인 이유는 무엇입니까?

다음 코드는 1~10이 출력될 줄 알았는데 출력이 5인데 계속 5가 출력됩니다. 이해가 안 되네요. 감사해요!

으아아아
大家讲道理大家讲道理2762일 전992

모든 응답(4)나는 대답할 것이다

  • 阿神

    阿神2017-05-19 10:42:19

    i는 실제로 initloop에서 선언된 것과 동일합니다.

    으아악

    이렇게 보면 함수 실행 과정을 생각해보면 이해가 될 겁니다.
    루프할 때마다 doloop에서는 i가 3으로 수정됩니다.
    doloop가 실행된 후 i++가 실행되고 실제 매개변수가 전달됩니다. 루프에 들어가는 것은 4 + 1이어야 합니다.
    그래서 콘솔은 먼저 1이 되고 무한 루프에서 계속 5를 출력합니다.
    원하는 대로 1~10을 출력하려면 doloop의 i에 var를 추가하세요. 지역 변수로 만드세요.

    회신하다
    0
  • 高洛峰

    高洛峰2017-05-19 10:42:19

    첫 번째 루프 i=0, doloop 실제 매개변수 i+1이 1이므로 첫 번째 출력은 1입니다. doloop 함수에는 i 변수가 없기 때문에 외부 범위에서 i 변수를 찾게 되므로 i=3은 루프 본문의 i 값을 3에 할당합니다. 첫 번째 루프가 끝난 후 i<10이므로 i++는 4입니다. 두 번째부터 i는 4이므로 dooloop의 실제 매개변수는 5이다. dloop 함수가 실행될 때마다 i에는 3의 값이 할당되므로 i는 항상 10보다 작다. 결과는 처음에는 1이고 루프에서 5를 인쇄합니다.

    회신하다
    0
  • 为情所困

    为情所困2017-05-19 10:42:19

    먼저 귀하의 코드를 실행해 보았는데 브라우저가 두 번 멈췄습니다... 브라우저 때문에 애도했습니다...
    이런 이유로 귀하의 코드가 유독하다는 것을 발견했습니다...

    실제 실행시에는 다음과 같이 입력하세요.

    1. for 루프에서 처음으로 i===0doLoop(1)를 실행하므로 doLoop 함수 내부에서 형식 매개변수 x===1는 외부 i의 값을 변경하고 이를 3으로 재설정하므로 이때 i== =3< /code>, 그리고 x의 값인 1을 인쇄합니다.i===0, 执行doLoop(1), 因此doLoop函数内部, 形参x===1, 接着又改变了外部i的值, 重置为3, 故此时i===3, 紧接着打印出了x的值, 即1.

    2. for循环第二次时, 由于第一次循环结束时i===3, 发生自增操作, 即i++. 故i最终等于4. 4+1=5, 故执行doLoop(5),本次打印出了5. 函数内部重复上一次的操作, 外部i变量再次被重置为3,本次循环结束后i===5.

    3. for循环第三次时, 重复上次操作, i再次被重置为3, 再次打印5, 以此类推, 最终外层的for循环失效, 每次i的值都被重置为3

    for 루프가 두 번째 반복되면 첫 번째 루프가 i===3에서 끝나므로 자동 증가 연산이 발생합니다. 즉, i++. 따라서 최종적으로 4와 같습니다. 4+1=5이므로 doLoop(5)가 실행되고 < 이번에는 /code>가 인쇄됩니다. 함수 내부에서 마지막 작업이 반복되고, 이 루프가 끝나면 다시 3으로 재설정됩니다. ==5.#🎜🎜 #

    #🎜🎜#for 루프가 세 번째로 마지막 작업을 반복하면 i는 다시 3으로 재설정되고 다시 5를 인쇄하는 식으로 진행됩니다. 외부 for 루프가 실패하고 i 값이 매번 3으로 재설정되어 루프 종료 조건을 충족할 수 없으므로 #🎜🎜 ##🎜 🎜# #🎜🎜# #🎜🎜#요약하자면 이런 방식은 문제가 있습니다. 함수 내부에서는 함수 외부의 변수를 변경하지 마세요.#🎜🎜#

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-19 10:42:19

    각 루프는 i에 3을 할당하고 dloop 함수의 i는 전용 변수가 아니므로 다음에 i++를 루프할 때마다 initloop의 i에 3이 할당됩니다. 자연스럽게 통과합니다. , dloop에서 인쇄될 때마다 5입니다. 문제를 푼 후 dloop는 i를 3으로 변경합니다. i는 결코 10과 같을 수 없으므로 루프는 끝이 없습니다

    회신하다
    0
  • 취소회신하다