我試圖將我的一箇中等規模的JavaScript API從「許多全局變量和函數」轉換爲更類似於jQuery和其他井中使用的命名空間封裝的東西深思熟慮的JavaScript庫。爲了實現這一點,我使用匿名函數。JavaScript booleans作爲值返回值,而不是引用
下面的代碼片段:
(function(window, undefined) {
var MyLib = (function() {
var AbortProgram = true;
function DisplayAbortProgram() { alert('AbortProgram inside=' + AbortProgram); }
return { AbortProgram: AbortProgram, DisplayAbortProgram: DisplayAbortProgram }
}())
window.MyLib = MyLib;
})(window);
MyLib.AbortProgram = false;
alert('AbortProgram outside=' + MyLib.AbortProgram);
MyLib.DisplayAbortProgram();
運行時,AbortProgram外值爲false,但內在價值仍然是正確的。這篇文章是爲了證實這種情況發生的原因?我相信這是因爲return語句返回的是DisplayAbortProgram的值,而不是對它的引用。其根本原因是JavaScript返回基本類型的值而不是引用 - 對象通過引用傳遞。
我讀過這個,並相信沒有辦法返回對該布爾變量的引用,所以我將不得不實現一個名爲SetAbortProgram(value)的函數。
我已經去了setter代碼 –