2013-11-04 10 views
2

하나의 Apps Script Project에 같은 이름의 함수가있는 여러 파일이있는 경우 범위는 어떻게 결정됩니까?함수 범위 규칙 (Google Apps Script Project)

  • 파일로?
  • 동적 범위 지정을 사용 하시겠습니까?
  • 정적 범위 지정을 사용 하시겠습니까?
  • 함수 작성 시간 (스크립트 파일 생성)?

    function start() { 
        var number = getNumber(); 
    } 
    
    function getNumber() { 
        return 5; 
    } 
    

    More.gs : 나는 Stuff.gs이있는 경우 예를 들어

function getNumber() { 
    return 10; 
} 

내가 start()를 호출하는 방법 구글의 플랫폼을 결정 하는가를하는 기능 전화할까요?

나는 이와 같은 테스트를 수행했으며 기대했던 결과를 얻지 못했습니다. 출력은 10.0입니다. 파일 범위 규칙이나 정적 범위 지정이 적용되지 않습니다.

Test.gs : 나는 더 테스트 할 세 번째 파일을 만든

function getNumber() { 
    return 15; 
} 

를 지금 출력은 15.0입니다. I 상기 테스트 소인 저장 는 범위를 결정하는지에 More.gs20에 10 변경되지만 출력은 여전히 ​​15.0이었다.

그래서 내게는 .gs 파일 생성 날짜가 범위를 결정하는 것으로 보입니다. 함수 이름이 들어있는 파일의 가장 최근 타임 스탬프가 사용됩니다. 내 가정에서 올바른지 아니면 그냥 우연의 일치입니까? 그리고 다른 방법으로 결정됩니까?

또한 Google의 Apps Script 또는 Javascript와 관련이 있습니까?

답변

2

이러한 선언이 모두 글로벌 범위에있는 것처럼 보입니다. 이후의 정의는 이전의 정의를 덮어 씁니다. 따라서 처음에 Stuff.gs을 포함하면 More.gs, 다음으로 Test.gs을 포함하고 나중에 함수를 호출하면 의미가 있습니다.

JS의 범위 지정은 정적 (with 및 로컬 eval이없는 엄격 모드라고 가정)이지만 글로벌 범위는로드 된 모듈 (및 해당 순서)을 기반으로 동적으로 수정할 수 있습니다. 이것은 대부분의 JavaScript 환경에서의 동작이며, 일부는 추가 파일 (모듈) 범위를가집니다.

+0

아, 그래. 내 작품의 라이브러리에 몇 가지 새 파일을 통합하려했습니다. 중요한 것을 "덮어 쓰는"것을 원하지 않았고 환경을 어떻게 처리 할 지 확신 할 수 없었습니다. 감사! –