기본 로컬 대 로컬의 명시적 선언안녕하세요, 함수의 로컬 범위와 관련하여 위험을 제한하는 최선의 방법을 이해하려고 합니다. 내 이해에서 함수 실행 내에서 Here 범위를 오염시킬 가능성을 제한하기 위한 옵션은 로컬 변수를 선언하거나 기본 로컬을 사용하는 것입니다. 그러나 이들 각각에는 몇 가지 문제가 있습니다.
기본 로컬:
- 참조 값은 컨텍스트에 따라 달라질 수 있습니다. 로컬로 정의되지 않은 이름은 Here then possible(Names Default To Here가 해제된 경우) Global then current 테이블로 대체되기 때문입니다. 문서에서 언급한 바와 같이 이는 값이 컨텍스트에 따라 달라지므로 동작을 덜 예측할 수 있음을 의미할 수 있습니다.
명시적 선언:
- 참조 값은 컨텍스트에 따라 다를 수 있습니다. 이름이 로컬 이름에서 선언되지 않은 경우 선언될 때까지 이름이 여전히 이 폴백 동작을 사용하기 때문입니다.
- 할당이 실수로 Here 범위로 유출될 수 있습니다. 즉, 지역적으로 의도된 이름이 지역 이름 선언에서 생략되면 주변 Here 범위를 오염시킵니다.
- 일반적으로 이 외부 범위 오염은 추적하기 어렵습니다.
- 예를 들어 "i"를 반복자로 사용하는 For에서 함수를 호출하고 해당 함수에도 i를 사용하는 For가 있고 이를 로컬로 선언하지 못하는 경우 외부 For 루프에 영향을 미칩니다. 이것은 명백한 프로그래머 오류이지만 만들기는 쉽고 디버깅하기는 어렵습니다.
내 생각에 이상적인 옵션은 "엄격한 로컬"과 같은 것을 선언할 수 있을 것입니다. 이 옵션은 항상 정규화되지 않은 이름(값을 할당하고 값을 참조할 때)을 로컬 및 주변 범위가 한정된 이름으로만 액세스할 수 있기 때문에 취급합니다. 이렇게 하면 주변 스코프를 오염시킬 위험이 없을 뿐만 아니라 해당 스코프에 의존할 때 선언하도록 강요하여 주변 스코프의 로컬 오염을 제한할 수 있습니다.
스크립팅