2012-10-26 2 views
19

나는 UglifyJS에서 몇 가지 물건의 출력을보고 다음과 같은 몇 가지 코드를 통해 발생 하였다이 JavaScript가 작동하는 이유는 무엇입니까?

var a = 0; 
var b = function() { 
    return function() { 
     a++; 
    }(), 'Hello, World' 
}(); 

a1b에있는 코드를 실행 한 후 문자열 Hello, World!입니다.

언뜻보기에 은 undefined이 될 것입니다. 반환 값이없는 함수의 결과처럼 보이지만 그 뒤에 쉼표와 문자열 리터럴이옵니다.

왜이 기능이 작동합니까?
그리고 왜 UglifyJS는 익명 함수를 실행하지 않고 Hello, World!을 다음 문장으로 반환하지 않습니까?

+5

더 좋은 질문은 왜 당신 (또는 누구든지)이 방법으로 자바 스크립트를 작성하는 것입니까? 코드는 모호하지 않아야합니다. –

+5

@CoreyOgburn 쉼표 연산자가 무엇인지 아는 경우 애매하지 않습니다. – AD7six

+0

'var a = ("rofl", "lol!") ;; – jAndy

답변

25

쉼표 연산자로 인해 작동합니다. MDN이 사양에서 :

콤마 연산자는 왼쪽에서 오른쪽 피연산자 모두를 평가하고, 두 번째 피연산자의 값을 반환한다.

두 함수가 모두 IFFY이므로 즉시 실행됩니다.

+1

IFFI는 무엇입니까? – j08691

+4

@ j08691 : 그는 "IIFE"또는 "Immediately-Invoked Function Expression"을 의미한다고 생각합니다. 그때 당신이 함수를 만들고 즉시'function() {}()'처럼 그것을 호출 할 때입니다. 그러나 모든 * 기능은 "IIFE"가 아닙니다. –

+3

@Rocket, Wouter는 예제 코드에서 * both * 함수가 IIFE임을 의미합니다. – bfavaretto

6

the comma operator을 사용하는 표현식의 결과는 쉼표 연산자의 오른쪽에 있습니다.

return a_function_call(), a_string 

을 ... 그래서 당신은 할당 a_string를 얻을 :

당신은있다. 모든

4

첫째 날 MDN on the comma operator을 인용하자 (왼쪽에서 오른쪽) 및 두 번째 피연산자의 값을 반환

쉼표 연산자는 피연산자를 모두 평가합니다. 그와

은 분명하다 말했다되고, 코드가 평가하는 방법 : 당신은 쉼표 (,)로 구분이 개 값을 반환

바로 실행 기능 내부

:

function() { a++; }() 

'Hello World' 

그래서 두 피연산자가 계산됩니다. 이것은 당신의 변수 a을 증가시키고 b를 만드는 함수의 반환 값은 다음 식에 이르게 :

undefined, 'Hello World' 

가 마지막으로 오른쪽 피연산자 따라서 값 'Hello World'b 제공, 외부 함수의 값으로 반환됩니다.

+0

'return a ++, 'Hello World'도 같지 않을까요? 나는'function()'이 필요하다고 생각하지 않는다. –

+1

@RocketHazmat 여기서는 필요 없지만 OP 코드에 있습니다. – Sirko

0

comma operator in JavaScript을 확인하십시오.

쉼표 연산자는 두 피연산자를 모두 왼쪽에서 오른쪽으로 평가하고 두 번째 피연산자의 값을 반환합니다.

관련 문제