2012-05-20 2 views
2

쉼표 연산자는 쉼표로 구분 된 각 피연산자를 평가하고 마지막 피연산자의 값을 반환합니다.자바 스크립트 : 쉼표 연산자, var 및 범위 - 왜 작동합니까?

(i = 1 + 2), (j = 3 + 4); 

또한
i = 1 + 2; 
j = 3 + 4; 

기능적으로 동일 내가 아는 한, A, 연산자로 간주되지 않습니다 같은 var과 같은 문,하지만, 피연산자의 오히려 일부입니다. 각 피연산자 별도로 평가되고 그래서 만약 그렇다면 왜

function foobar() { 
    var i = 3, j = 7, z; 
} 

3 개 변수를 생성하지

(https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence보기) - I, J 및 Z -는 foobar의 범위?

나는 그것이 실제로 일어난다는 것을 안다. 그러나 나는 이것이 실제로 일어나는 이유는 얼마 동안 궁금해하고있다. 내가 foobar의 범위에 있어야하지만, j와 z는 전역 범위에서 끝나야합니다.

답변

4

var 문에 사용 된 쉼표는 실제로 쉼표 연산자가 아닙니다.

마찬가지로 함수 호출에서 인수를 구분하는 데 사용하는 쉼표도 쉼표 연산자가 아닙니다.

+0

이 소유권 주장에 대한 참고 자료가 있습니까? 실제로 https://developer.mozilla.org/en/JavaScript/Reference/Statements/var에 명시된 내용은 표시되지 않습니다. – BrianFreud

+0

아,이 예제의 텍스트는 https : //developer.mozilla에 있습니다. .org/ko/JavaScript/Reference/Operators/Special/Comma_Operator. 나는 이것이 "같은 것"이 아니라 "거의 같은 것"으로 만드는 그 작은 차이라고 생각한다 ... – BrianFreud

+0

참조 :'var' 문은 쉼표 [자체 구문 요소로 지정]을 갖는다 (http : /www.ecma-international.org/ecma-262/6.0/#sec-variable-statement) (ECMAScript 사양) –