【发布时间】:2017-04-09 01:49:27
【问题描述】:
我以为我理解了闭包,但突然之间一些简单的事情似乎不起作用了。
我使用闭包创建了一个单例。这是一个非常缩小的版本:
Foobar = function() {
var data = null;
function init(obj) {
data = obj;
}
return {
init: init,
currentValue: data
}
}();
由于它是一个单例,我希望当我调用“init”函数时,“data”的值将在唯一存在的对象中更改,并且该值在后续检索中仍然可用'当前值'。
这是我的测试:
Foobar.init({id:3});
var test = Foobar.currentValue;
当我在 Firefox (F12) 中单步执行此代码时,我可以看到是的 - 'data' 对 init 函数是可见的,并且当我执行 'init' 时它正在更改该变量。但是,在退出 init 函数并返回执行测试的第二行后,var 'test' 被赋值为 null(创建单例时的原始值),而不是我传递给 'init' 函数的对象的副本,正如我所料。
有人能解开我的困惑吗?
【问题讨论】:
标签: javascript