2013-04-05 5 views
1

그래서 this question에서 나는 자바 스크립트가 압축 된 방법에 대해 물었습니다. 질문에 답이 났지만 다음 스 니펫이 너무 혼란스러워 다른 질문을해야했습니다. 여기에 있습니다 :자바 스크립트 "for"구문

for (Y = 0; $ = 'zxqj`_^[email protected]$ ' [Y++];) 
    with(_.split($)) _ = join(pop()); 
eval(_) 

이 구문의 출처는 무엇입니까? 나는 작동을위한 세 번째가 ([Y++]) 인 것을 이해하지만, 왜 그것을 괄호 안에 넣고 그 앞에 어떤 세미콜론도 없는가? 또한 라인 2에서 : _이 선언 된 변수 인 것처럼 보이지만 어떤 종류의 변수 유형이 with(_.split($))입니까?

답변

2

for 명령을 세분화 할 수 있습니다. 은 "고전적인"루프로 시작 :

for(i=0; i<end; i++) 

을에이 변환 다음

  • 설정 i=0
  • 를 반복 한 i<end로 :
    • 실행 블록의 코드
    • 증분 i

그래서, 코드에 동일하게 적용 : 문자열의 위치 Y에 문자로있는 한

  • 설정 Y=0
  • 하는 (즉 존재한다. Y는, 다음, Y를 증가 다음 $에 그 문자를 할당하고) 문자열의 길이를지나되지 않습니다 :
    • 이 블록의 코드를 실행
    • 두 번째 세미콜론 후 아무것도)
    이없는 (아무 것도 안 함

지옥처럼보기 흉하지만 추락하면 여전히 의미가 있습니다.

+0

그래서 [[Y ++]'는 일종의 정규 표현식입니까? –

+1

아니요, 문자 배열로 문자열에 액세스하고 있습니다. 자바 스크립트뿐만 아니라 많은 언어가이를 지원합니다. –

+0

오오하우, 알겠습니다. 그 사이의 공간을 생각하지 않았을 것입니다! –

관련 문제