1

간단한 JS 코드를 사용해 보았습니다. 루프 내에서 루프 변수를 선언하려면 var 키워드를 사용해야한다는 것을 알고 있었고 글로벌 변수 선언을 피하기 위해 루프는 for이라고 말합니다. 이것은 인라인 오브젝트에 for 루프의 루프 변수가 지향 방법으로 (사실은 내가 알고, 일 필요는 없다)JS 루프 가변 범위

var a = [1, 2, 3, 4, 5, 6]; 
for (var i = 0; i < a.length; i++) 
    document.write(a[i]); //123456 
document.write(i); //6 

되지 않습니다 : 그러나 나는 루프 변수가 너무 루프의 실행 후 존재한다는 것을 깨달았 개념이 작동합니다. JavaScript와 OO 언어를 비교하지 말아야한다는 것을 알고 있습니다. 그러나 나는 단지 OO 언어의 행동이 더 낫다는 것을 추측하고있다.

이 코드를 <script> 태그에 직접 입력하면 실제적으로 원치 않는 전역 변수에 루프 변수가 추가됩니다. 그런가요? 아니면 내가 잘못 생각하고 있니?

우리는 명시 적 기능의 범위를 작성하여 같은 동작을 얻을 수 있습니다/

var a1 = [1, 2, 3, 4, 5, 6]; 
(function() { 
    for (var i1 = 0; i1 < a.length; i1++) 
     document.write(a[i1]); //123456 
})(); 

document.write(i1); //undefined 

를하지만 표준 방법은 생산에 따라? 다른 어떤 일들을 할 수 있습니까?

+0

for 루프와 그 범위 지정 동작은 OOP과 어떤 관련이 있습니까? – Bergi

+0

@Bergi 음, for (int i = 0; i Mahesha999

+0

JavaScript (및 많은 다른 언어)에는 블록 범위가 없습니다. 그리고 그것은 언어가 어떤 OOP 원칙을 따르는 지 여부와 아무 관련이 없습니다. – Bergi

답변

2

명시 적 기능 범위를 만들어 이러한 동작을 달성 할 수 있습니다. 그러나 표준 방식인가/생산 방식을 따르고 있습니까?

예. 함수는 JavaScript에서 새 범위를 도입 할 수있는 유일한 방법입니다 (이후 버전에서는 let으로 변경 될 수 있음). 및 IIFEs은 생산에서도 많이 사용됩니다.

다른 어떤 작업을 수행 할 수 있습니까?

i의 범위를 for 루프의 블록으로 제한 하시겠습니까? 없음 (단, let은 제외). 그러나 아무 것도 간섭하지 않으므로 거의 수행 할 필요가 없습니다. var i은 여전히 ​​사용자의 기능 범위입니다. 때로는 루프 후 진행중인 카운터로 i을 사용하려고 할 수도 있습니다.

+0

하지만 모든 for는 함수 범위 안에 중첩 될 필요가 있다는 것을 의미합니까? – Mahesha999

+0

아니요. 'i'가 루프에서 명시 적으로 범위 지정되어야하는 경우에만 해당하지만 거의 불가능합니다. – Bergi

+1

수사학? yes일지도 모르지만, 나는 그 프레임을 깔끔하게 틀을 잡으려 고 노력했지만 거대한 응답과 히트를 일으키는 것은 아닙니다. 그렇지 않으면 모든 좋은 질문은 수사학이 될 것입니다. 나는 보통 초기 독서 후, 웹을 거치면서 읽은 낡은 주제에 관한 중요한 것들을 발견한다. 그래서 내가 무엇이든 놓친 지 확인하고 싶다. JS와 같은 언어에서는 매우 유연하며 패턴을 따로 따로 따로 책을 따로 보관할 수 있습니다. 질문에 대한 대답은 아니오 일 수 있습니다.이 문제를 해결하기위한 다른 알려진 방법이나 패턴은 없지만 여전히 내 이해에 도움이됩니다. – Mahesha999

0

자바 스크립트 만 function scopevar을 (를) 사용하여 정의 된 모든 변수는 함수에서만 사용할 수 있습니다. for 루프는 변수의 범위를 만들지 않습니다.

+0

예요. 그렇지만 JS에서 OOP의 장점을 취하거나 JS가 OO 언어처럼 동작하도록 만드는 패턴이나 관례가 많이 있습니다. 루프/루프 변수를 루프 블록에 적용하는 표준/잘 수행 된 해결 방법/패턴이 있는지 알고 싶습니다. – Mahesha999

0

자바 스크립트가 조금 이상하고 IMHO에 중/대형 프로젝트의 언어가 좋지 않은 많은 결함이 있습니다.

"var"는 변수가 현재 함수 범위에서만 사용 가능하다는 것을 의미합니다. 모든 변수는 함수가 실행되고 "정의되지 않음"으로 설정되기 전에 begening에서 정의됩니다. 그래서 :

alert(i); 
var i=4; 
alert(i); 
var i=5; 
alert(i); 

내부적 의미 : 그 예상대로 "VAR"키워드가 작동한다는 것을 의미하므로

구조적 프로그래밍에서
var i=undefined; 
alert(i); 
i=4; 
alert(i); 
i=5; 
alert(i); 

, 모든 코드는, 함수에 있어야합니다. 그러나 전역 범위에서 코드를 작성하면 "var"는 실제 의미가 없습니다.