편집자는 이 질문이 JavaScript 범위를 이해하는 데 매우 도움이 된다고 생각하여, 다른 사람들에게도 도움이 되기를 바라는 마음으로 저만의 문제 해결 아이디어를 다시 정리했습니다.
먼저 면접 질문 살펴보기:
var arr = [1, 2, 3]; for (var i = 0, j; j = arr[i++];) { console.log(j); } console.log('---------'); console.log(i); console.log('---------'); console.log(j); console.log('---------');
문제를 해결하기 전에 먼저 JavaScript의 변수 필드와 관련된 지식을 검토해 보겠습니다.
전역변수(전역)
전역변수는 어디에서나 접근이 가능한 변수를 의미합니다.
var 키워드 사용 여부에 관계없이 선언된 외부 함수
var 키워드를 사용하지 않고 함수에서 선언해야 합니다. 물론 선언된 문장을 실행해야 합니다
지역변수(Local)
지역 변수는 선언된 함수 내에서만 접근 가능합니다
함수 내부 선언, var 키워드 사용
주의할 점 두 가지
먼저 코드를 살펴보세요.
alert(i); // 输出 undefined for (var i = 0; i < 1; i++){}; alert(i); // 输出1
JavaScript에는 명령문 범위가 없습니다. 명령문 내에 정의된 변수는 명령문 외부로 퍼집니다. 예제에서는 i가 for 문 외부에서 선언되었지만 계속 액세스할 수 있습니다.
for 문 이전에 액세스할 수 있지만 아직 할당되지 않았습니다
문제 해결을 시작해 보겠습니다.
i++는 i를 사용한 후에 추가됩니다.
처음 실행 시 j=arr[0], 이후 i=1, console.log(j)는 1을 출력합니다
두 번째 실행 시 j=arr[1], 그 다음에는 i=2, ocnsole.log(j)는 2를 출력합니다
세 번째 실행 시 j=arr[2], 그 다음 i=3, ocnsole.log(j)는 3을 출력합니다
네 번째(for 조건을 충족하지 않음) j=arr[3]이 정의되지 않은 다음 i=4, ocnsole.log(j)에 출력이 없고 for 루프를 종료합니다
for 문이 실행된 후 console.log(i)는 위 분석에서 4를 출력하고, console.log(j)는 정의되지 않음을 출력합니다
최종 출력 결과는 다음과 같습니다.
2 --------- --------- undefined ---------
위의 분석과 결과를 다들 이해하셨을 텐데요, 그러면 추론이 시작됩니다.
질문 빌려서 질문 바꾸기
제목:
var arr = [1, 2, 3];
for (var i = 0, j; j = arr[++i];) { console.log(j); } console.log('---------'); console.log(i); console.log('---------'); console.log(j); console.log('---------');
정답:
2 3 --------- 3 --------- undefined ---------
빌린 질문과 수정된 질문 2
제목:
function xxx() { var arr = [1, 2, 3]; for (var i = 0, j; j = arr[i++];) { console.log(j); } } xxx(); console.log('---------'); console.log(i); console.log('---------'); console.log(j); console.log('---------');
정답:
1 2 3 --------- 报错:Uncaught ReferenceError: i is not defined
이 내용을 여러분과 공유합니다. JavaScript 범위를 이해하는 데 도움이 되기를 바랍니다.