21.02.18 14:17 작성
·
187
2
전치 연산자는 문장 안에서 1 증가는 그렇다 쳐도, 후치 연산자는 세미 콜론 다음에 감소한다는 것은 잘못된 설명 같습니다.
예를 들어,
var one = 1;
console.log( one ++);
처럼 단편적으로 후치 연산자 하나만 실행 했을 때는 세미콜론 다음에 감소하는 것처럼 보일 지는 몰라도
var one = 1;
console.log( one-- + ++one );
과 같이 실행 했을 때, 후치 연산자가 문장을 수행한 후에 감소한다면 이것의 결과는 1+2가 되어 3이 되어야겠죠. 하지만 실행 결과는 2 입니다. 왜냐하면 one-- 이후에 one은 0이고 ++one에서 one은 또다시 1이 되어서 1+1 = 2 라고 생각이 드네요.
그러니까 후치연산자도 결국 문장안에서 실행된다고 표현하시는게 맞지 않을까요? 다만 이것도 표현식을 평가한 후에 1 증가 또는 감소라고 하는 편이 맞는 것 같다고 생각합니다.
답변 1
3
2021. 02. 18. 17:18
좋은 질문입니다. 자바스크립트 스펙에 아래와 같이 기술되어 있습니다.
When a ++ or -- token is encountered where the parser would treat it as a postfix operator, and at least one LineTerminator occurred between the preceding token and the ++ or -- token, then a semicolon is automatically inserted before the ++ or -- token.
----------
var one = 1, two = 2;
console.log(one-- + ++two); // 결과: 4
console.log(one) // 값: 0
4가 되려면 one--를 실행하지 않고 1이어야 합니다. 또한, 3번째 줄의 console.log(one)의 값은 0입니다. console.log(one-- + ++two);를 실행할 때는 one--를 하지 않고 (1 + 3)을 한 후, 세미콜론에서 one--를 했다고도 볼 수 있습니다. 아래 코드에서 결과는 7이며 (1 + 3 + 3) 형태가 되어야 7이 될 수 있습니다. 두 개의 결과에서 one--는(은) 세미콜론을 만났을 때 실행한다고 볼 수 있습니다.
지금까지 결과로 보면 console.log(one-- + ++two); 형태는 생각한 것과 다르게 결과가 나올 수 있다는 것입니다. 코드의 가독성을 위해 사용하지 않는 것이 나을 것 같습니다.
var one = 1, two = 2, three = 3;
console.log(one-- + three-- + ++two); // 결과: 7
2021. 03. 02. 14:35
제 질문 의도가 잘 전달되지 않은 것 같습니다.
var one = 1;
console.log(one, one-- + ++one, one, --one);
한 번 이 경우에 대해서 생각해보죠.
말씀하신 것 처럼 one--가 세미콜론을 만났을 때 실행한다고 볼 때, 로그의 두번째 인자는 1+2가 되어 3이 출력되어야 합니다.
하지만 결과는 2이고 로그 세번째 인자에서 1로 출력됩니다.
그러니까 두번째 인자에서
1 + ( 0 ( 1-- ) → 1 ( 0++ ) ) + 1 ( 중간 괄호는 one 변수의 연산 과정 )
로 2인 것 같습니다. 따라서 후치연산자도 세미콜론을 만나야 실행되는 것이 아닌, 문장 중간에 실행된다 라고 표현하는 것이 더 맞다고 생각듭니다.
강의 잘 듣고 있습니다.