강의로 돌아가기
-

자꾸 에러가 납니다...

크롬 콘솔도구에서 아래 구문을 실행시

var cost = [ 85, 42, 37, 10, 22, 8, 15 ];
var total_cost = 0;

for (i=0; i<cost.length; i++) {
total_cost += cost[i];
}

console.log(total_cost);

219 콘솔 로그가 나옵니다.

해당 예제파일에서 실행시 자꾸만 에러가 나오는데 왜그런걸까요??

작성중인 코드―forTest
1
2
3
4
5
6
7
8
var cost = [ 85, 42, 37, 10, 22, 8, 15 ];
var total_cost = 0;

for (i=0; i<cost.length; i++) {
    total_cost += cost[i];
}

console.log(total_cost);
5 개의 답변
-

var를 쓰지 않는 암시적 선언은 사용하지 않는 것이 좋기 때문에 암시적 선언을 쓰면 에러가 발생하게끔 설정해놓았습니다.

for문 안에
(i=0; i<cost.length; i++)
(var i=0; i<cost.length; i++) 로 바꿔주세요.

관련 자료:
한글 - https://msdn.microsoft.com/ko-kr/library/z16cackw(v=vs.94).aspx
영문 - http://www.w3schools.com/js/js_strict.asp

제임스1

변수 i를 처음 선언할 때는 var를 붙여줘야합니다.

for (i=0 ...

for (var i = 0..
이렇게 말이죠.

var를 선언안하면 전역변수로 인식이 되기에 크롬 도구에선 동작할 겁니다.
하지만 var를 항상 붙여주는것이 좋으며, 안 붙일 시 오류가 날 여지가 많습니다.

실제로 use strict; 를 선언하면 요즘엔 var 없이 변수 생성이 안됩니다.

  • -
    아 자꾸만 var 를 선언 안했네요;;; 저번에도 글코.... ㅠㅠ 또다시 깨우칩니다... 역시 닝겐이라 어쩔수 없는것인가;;; 나도 알파고가 되고 싶구나.... - 2017.08.18 11:24
이확영

아래와 같이 for loop의 변수 i 앞에 var를 붙이면 정상적으로 실행됩니다. strict mode로 실행되기 때문에 var를 사용하여 변수를 선언하지 않으면 오류가 발생하는 것입니다.

var cost = [ 85, 42, 37, 10, 22, 8, 15 ];
var total_cost = 0;

for (var i = 0; i < cost.length; i++) {
    total_cost += cost[i];
}

console.log(total_cost);
  • -
    Strict Mode 를 이해할때 가령 예를 들면 html 에서도 버전에 따라서는 Strict Mode 를 사용 하잖아요 그와 같은 개념으로써 엄격히 규제 한다그래서 var 를 꼭 붙혀줘야 한다.. 뭐 이런뜻으로 받아 들여도 될런지요? - 2017.08.18 11:24
  • 제임스1
    네 맞아요!. 명시적으로 strict mode를 사용하실려면 맨 위에 "use strict"; 이걸 붙여주면 strict mode가 됩니다. 제임스1 2017.08.18 11:24
  • -
    소중한 정보 감사합니다 확실히 배워 갑니다~! - 2017.08.18 11:24
-

for (var totalcost = 0; totalcost < cost.length; totalcost++) {
total
cost += cost[total_cost];
}

이렇게 쓰면 왜 86이 나오는걸까요?

이주한

이재성님 답변입니다.

totalcost 값을 for문 초기문으로 쓰셨네요
그렇다면 for문 전에 선언한 var total
cost = 0; -> 이 변수는 무시가 됩니다.
변수명이 같은 경우 같은 블록{}안에 있는 변수를 우선적으로 보기때문에
for문에 선언한 변수로 인식합니다.

위말에 이해가 되야 86이나오는 이유를 알 수 있습니다.

1번째 for문실행시 : 조건이 (totalcost < cost.length) -> (0 < 7) true
toal
cost = 0 + cost[0]; -> totalcost = 0 + 85; 가 됩니다.
이후 증감문(강의에는 update문)에 total
cost++가 있기때문에 totalcost=85+1; 이 됩니다.
2번째 for문실행시 : 조건이 (total
cost < cost.length) -> (86 < 7) false
조건문 실행종료

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.