此問題與傳統ASP中的Javascript有關。它與在瀏覽器中運行的Javascript無關。在經典ASP/Javascript中將對象插入全局範圍
爲被設計成可重複使用的一個JS模塊的典型結構是這樣的:
(function(globalScope) {
... declarations here...
}(this));
這允許語法封裝的代碼,以允許通過在運行時解析器/編譯器檢查。它還提供範圍管理,因此在curlies內聲明的變量和函數不會在外部可見。
另一種典型的結構是「出口」的對象或屬於所述範圍內的功能,向外部範圍,經由分配,這樣的:
(function(globalScope) {
var data = ['Alpha', 'Beta', 'Gamma'];
function helper(a) { .... }
function search(d) { .... }
// "export" a function so it is externally visible
globalScope.searchData = search;
}(this));
// typeof this.searchData == "function"
// typeof this.data == "undefined"
// typeof this.helper == "undefined"
// typeof this.search == "undefined"
這是所有相當典型。
在傳統的ASP(注意:服務器端JavaScript !!)中使用這種構造時,JS引擎會拋出。我得到一個500錯誤。
爲什麼?
我可以使用範圍構造並將其導出到全局範圍,在經典ASP中?
在瀏覽器運行時,「this」評估爲「窗口」。在服務器端的經典ASP運行時,全局「this」的價值是什麼?是否可以將新屬性分配給該「this」?