자바 펼쳐 루프 변수 범위
JavaScript 변수의 범위 지정에 대한 간단한 질문입니다.
alert()
함수 i
가 반환 하는 대신 값을 인쇄하는 이유는 undefined
무엇입니까?
$(document).ready(function () {
for(var i = 0; i < 10; i += 1){
}
alert("What is 'i'? " + i);
});
나는 JS 처음을 접하고 내가 다룬 거의 모든 다른 언어에서 루프 범위의 선언에는 루프에 대한 값이 포함이 경우에는 있습니다. 왜 그런가요?
즉 What is 'i'? 10'
인쇄됩니다.
루프 의 " 초기화 순서 변수 "에 전체 MDN을 참조하십시오 .for
식 (할당 식 포함) 또는 변수 선언. 일반적으로 카운터 변수를 초기화하는 데 사용됩니다. 이 사용은 선택적으로 var 키워드를 사용하여 새 변수를 선언 할 수 있습니다. 모든 변수는 루프에 국한되지 않습니다. 즉, for 루프가있는 동일한 범위에 있습니다. 이 작업의 결과는 삭제됩니다.
펼쳐가 될 자바 때까지 블록 범위를하지 않았다 const
및 let
단지, 도입 var
범위 기능 현관이다. 의 초기화 i
는 하나의 함수 유전자 소유 해당 변수는 동일한 함수의 다른 곳에서 액세스 할 수 있습니다.
에서 MDN :
중요 : JavaScript는 블록 범위가 없습니다. 블록과 함께 도입 된 변수는 포함하는 함수 또는 펼쳐 범위가 지정 설정 효과는 블록을 넘어서 지속됩니다. 즉, 블록 문은 범위를 도입하지 않습니다. "독립 실행 형"블록은 유효한 구문이지만 JavaScript에서 독립 실행 형 블록을 사용하고 싶지 않습니다. C 또는 Java에서 이러한 블록과 같은 작업을 수행 할 생각을 사용자가 생각하는 작업을 수행하지 않습니다.
자바 펼쳐 사람들이 문제를 해결합니다!
EcmaScript6 (일명 EcmaScript 2015)는 지난 여름에 통과 된 최신 버전의 자바 확장 브라우저는 이제 막 기능을 지원하기 시작했습니다.
기능 기능 중 하나는 "let"표현식이있는 블록 범위 지역 변수입니다. 현재 (2016 년 4 월) 현재 대부분의 주요 브라우저 버전은 Safari를 제외하고이를 지원합니다. 이를 지원하는 모바일 브라우저는 거의 없습니다.
여기에서 자세한 내용을 읽을 수 있습니다 ( "for 루프의 let 변수"섹션 참조) : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
여기에서 현재 브라우저 지원을 확인할 수 있습니다. (행 바인딩-> let 찾기) : https://kangax.github.io/compat-table/es6/
다른 언어 (예 : Java, C ++, C)와 달리 JavaScript는 블록 범위를 지원하지 않습니다. 루프 또는 함수에서 선언하면 범위는
for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
여기서 당신 i
은 전역 변수 j
가되고 루프가있는 함수 나 펼쳐져 있습니다.
for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
위의 내용이 전역 변수를 생성하는 방법은 무엇입니까 i
? 나는 항상 var
변수를 선언 하는 데 사용할 것입니다. ( '말'이 아닌 ' 말씀 하는 것 '이라고 말하는 것이 아니라 JS 코딩 시나리오의 99.99 %에서는 거의 발생하지 않습니다 ...)
var
값을 할당 초기 할 때 생략 하면 i
로컬 또는 전역 변수가 생성되지 i
않고 전역 개체에, 대한 속성이 생성됩니다 (대부분 전역 변수처럼 보이거나 동작 할 수 있지만 약간의 차이가 있습니다 ).
더 나은 것 :
var i;
for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
이제 루프는 전역 변수 i
(또는 i
이 코드가 함수에 함수 지역 변수 )를 사용하고 있습니다.
이것에 대한 자세한 내용 은 var 키워드 및 변수 의 기능 과 Javascript의 속성을 참조하십시오.
-약간 혼란스러운 점은 예를 들어 두 번째 루프에서 변수를 다시 선언 할 수있는 것입니다.
for(var i=0; i<9; i++){
document.write('i = ' + i + '<br>');
}
for(var i=0; i<9; i++){
document.write('i = ' + i + '<br>');
}
이것은 유효한 것입니다 (테스트 할 때 오류 없음). 자바 펼쳐에서 변수를 다시 선언 할 수있는 것입니다. 그러나 특별한 경우가 아니면 모든 것이 좋은 생각은 아닙니다. [Google Analytics에서 변수의 '안전한'선언을 사용하는 방법]을 참조하는이 관련 질문을 참조하십시오. 자바 펼쳐 변수 재 선언 )
재 선언 JS 변수 (또한과 같은 루프 변수에 대한 논의가있다 i
:)이 관련된 SO 질문에 내부 또는 외부 루프 변수 선언
변수의 단일 선언에 대한 이벤트 JavaScript 패턴이 있습니다.
참조 URL : https://stackoverflow.com/questions/18465211/javascript-loop-variable-scope
'ProgramingTip' 카테고리의 다른 글
git push fails :`check out branch : refs / heads / master 업데이트 거부 (0) | 2020.12.28 |
---|---|
인앱 구매에서 가격 등급을 설명 수 없습니다. (0) | 2020.12.28 |
OSX 10.11 El Capitan에 virtualenvwrapper를 사용할 수 없습니다. (0) | 2020.12.28 |
Apache에서 .svn 폴더에 대한 거부 액세스 (0) | 2020.12.28 |
쿼리를 사용하여 기존 테이블에 대한 SQL 작성 펼쳐 (0) | 2020.12.28 |