gpt4 book ai didi

JavaScript bool 值作为值返回,而不是引用

转载 作者:行者123 更新时间:2023-11-28 13:45:54 25 4
gpt4 key购买 nike

我正在尝试将我的一个中型 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 返回基本类型的值而不是引用 - 对象是通过引用传递的。

我已经阅读了这一点,并且相信没有办法返回对该 bool 变量的引用,因此我必须实现一个名为 SetAbortProgram(value) 的函数。

最佳答案

AbortProgram 被闭包隐藏,您无法更改它。这通常是您使用的模式的目标。

您对 MyLib.AbortProgram = false; 所做的并不是更改现有的隐藏变量,而是添加一个新的 AbortProgram 变量。

如果您想让 AbortProgram 可修改,请将代码简化为

var MyLib = {
AbortProgram: true,
DisplayAbortProgram: function DisplayAbortProgram() { alert('AbortProgram inside=' + this.AbortProgram); }
};

MyLib.AbortProgram = false;
MyLib.DisplayAbortProgram();

或者向您现有的代码添加一个 setter :

(function(window, undefined) {
var MyLib = (function() {
var AbortProgram = true;
function DisplayAbortProgram() { alert('AbortProgram inside=' + AbortProgram); }
function setAbortProgram(v) {AbortProgram=v}
return { AbortProgram: AbortProgram, DisplayAbortProgram: DisplayAbortProgram, setAbortProgram:setAbortProgram}
} ())
window.MyLib = MyLib;
})(window);

MyLib.setAbortProgram(false);
alert('AbortProgram outside=' + MyLib.AbortProgram);
MyLib.DisplayAbortProgram();

关于JavaScript bool 值作为值返回,而不是引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com