我正在尝试将我的一个中型 JavaScript API 从“大量全局变量和函数”转换为更类似于 jQuery 和其他经过深思熟虑的 JavaScript 库中使用的命名空间封装的东西。为了实现这一点,我使用了匿名函数。
这是代码的片段:
(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,但内部值为 true。这篇文章是为了确认发生这种情况的原因?我相信这是因为 return 语句返回的是 DisplayAbortProgram 的值,而不是对它的引用。根本原因是 JavaScript 返回原始类型的值而不是引用 - 对象是通过引用传递的。
我已经阅读了这一点,并相信没有办法返回对该布尔变量的引用,因此我必须实现一个名为 SetAbortProgram(value) 的函数。