이미 어딘가에 게시된 내용인 것 같은데 찾을 수가 없었습니다.
변수 범위가 JSL에서 처리되는 방식이 혼란스럽습니다.누군가 작동 방식을 명확히하는 데 도움을 줄 수 있습니까?
저는 거의 항상 i를 루프의 인덱싱 변수로 사용합니다.예를 들어 내 스크립트에는 다른 함수를 호출하는 인덱스로 i가 있는 for 루프가 있습니다.이 함수에는 i를 인덱스로 하는 또 다른 for 루프가 있습니다.이것은 C/Java/etc에서 문제가 된 적이 없습니다.때로는 jsl에서 작동하고 다른 경우에는 작동하지 않는 것 같습니다.문제가 발생한 위치를 정확히 파악할 수 없었기 때문에 예가 없습니다.그래도 JSL의 변수 범위에 대한 기본적인 이해라고 생각합니다.
JSL에서 변수는 "i"라는 변수의 예를 다음과 같이 설명합니다.
네임스페이스:i
네임스페이스를 설정하기 위해 지정된 것이 없으면 공식 사양은 다음과 같습니다.
::나
JSL의 기본 네임스페이스는 ":"이라는 이름의 네임스페이스이기 때문에......이상하지만 이에 대한 역사적 이유가 있습니다.그래서 입장하면
나는 = 7;
JMP가 보고 있는 것은 다음과 같습니다.
::i = 7;
따라서 이제 JSL 스크립트의 일부에서 변수 i가 변경된 다음 나중에 참조되면 새 값을 갖게 됩니다.
showit = Function( {I},
Show(I);
);
I = 2;
showit(I);
I=3;
showit(I);
그것은 반환
I = 2;
I = 3;
이제 함수는 변수를 함수에 로컬로 만들어 변수를 분리할 수 있습니다.
showit = Function( {I},{I},
I=55;
Show(I);
);
I = 2;
showit(I);
show(i);
이 코드의 결과는 다음과 같습니다.
I = 55;
i = 2;
글로벌 사용을 위한 i의 값은 변경되지 않았습니다.
이제 마지막 혼란이 있습니다.
i의 값은 변경될 수 있으며 i의 모든 후속 사용은 해당 변경 사항을 반영한다고 말했을 때 이는 실행 중인 다른 스크립트에서도 변경된다는 의미입니다.따라서 변수 i가 포함된 새 스크립트가 실행되면 이전 JSL 스크립트에서 설정된 i 값을 갖게 됩니다.따라서 "Names Default to Here( 1 );" 구현되었습니다.이 문은 2가지 작업을 수행합니다.먼저 네임스페이스를 ":"에서 "Here"로 변경합니다.두 번째로 "Here" 네임스페이스의 모든 변수를 실행 중인 스크립트의 변수로만 분리합니다.이제 다음 스크립트가 있는 경우
Names Default to Here( 1 );
i = 7;
변수 i의 이 인스턴스는 스크립트 내에서 i의 사용에 의해서만 변경됩니다.....다른 스크립트는 해당 변수 i의 변경에 액세스할 수 없습니다.
추신 변수 i의 공식 설명은 다음과 같습니다.
여기:나
"Names Default to Here( 1 );" 뒤에 스크립트에서 생성된 스크립트의 모든 변수; 문은 자동으로 네임스페이스 호출 Here에 배치됩니다.
Names Default to Here( 1 );
i = 7;
show(here:i)
"here:"를 사용하여 there 네임스페이스의 변수를 명시적으로 지정할 수 없나요?
왜 열 주소는 " :섹스 "와 같이 표현되나요?
빈 네임스페이스는 " 현재 데이터 테이블() "을 의미합니까?