2013-11-04 40 views
2

如果我在一個Apps Script項目中有幾個文件具有相同名稱的功能,那麼將如何確定範圍?功能範圍規則(Google Apps腳本項目)

  • 按文件?
  • 通過動態範圍界定?
  • 通過靜態範圍界定?
  • 函數創建時間(創建腳本文件)?

例如,如果我有Stuff.gs

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

function getNumber() { 
    return 5; 
} 

More.gs

function getNumber() { 
    return 10; 
} 

我呼籲start(),請問谷歌的平臺確定哪些功能打電話?

我做了這樣一個測試,我沒有得到預期的輸出。輸出是10.0。在我看來,文件範圍規則都不適用,也沒有靜態範圍界定。我創建了一個第三個文件,以進一步測試:

Test.gs

function getNumber() { 
    return 15; 
} 

現在的輸出15.0。我進一步測試和改變至 More.gs以查看是否節省時間戳確定的範圍,但輸出仍然15.0

對我來說,似乎.gs文件創建日期確定範圍 - 使用包含函數名稱的文件上的最新時間戳。我的假設是否正確?或者這只是一個巧合,而且是以其他方式確定的?

此外,這是特定於谷歌的Apps腳本,或一般的Javascript?

回答

2

看起來這些聲明都在全球範圍內。隨後的定義將覆蓋以前的定義,因此如果您首先包括Stuff.gs,然後More.gs,然後Test.gs,並且之後調用您的函數,那麼它將有意義。

JS中的範圍是靜態的(假設嚴格模式沒有with和本地eval),但全局範圍可以根據加載的模塊(及其順序)動態修改。這是大多數JavaScript環境中的行爲,有些還具有附加的文件(模塊)範圍。

+0

啊好的,這是有道理的。我正準備在我的作品庫中加入一些新的文件。我不想'重寫'任何重要的東西,我不確定環境如何處理它。謝謝! –