Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript闭包函数中保留变量_Javascript_Closures - Fatal编程技术网

在javascript闭包函数中保留变量

在javascript闭包函数中保留变量,javascript,closures,Javascript,Closures,我几乎是javascript编程的新手,我真的需要一些帮助/建议 我想做的是: 我有一个函数(或对象?!)如下所示: var svgInteraction = function (containerId) { var svgNamespace = "http://www.w3.org/2000/svg", htmlns = "http://www.w3.org/1999/xhtml", mathns = "http://www.w3.org/1998/Math/M

我几乎是javascript编程的新手,我真的需要一些帮助/建议

我想做的是: 我有一个函数(或对象?!)如下所示:

var svgInteraction = function (containerId) {
    var svgNamespace = "http://www.w3.org/2000/svg",
        htmlns = "http://www.w3.org/1999/xhtml",
    mathns = "http://www.w3.org/1998/Math/MathML";

    svgInteractions = {};

    svgInteractions[containerId] = "I am " + containerId;
    console.log(svgInteractions);

    return function () {
        console.log(svgInteractions);
    }
};
var svg1 = svgInteraction("container_1");
var svg2 = svgInteraction("container_2");
我初始化一个变量,如下所示:

var svgInteraction = function (containerId) {
    var svgNamespace = "http://www.w3.org/2000/svg",
        htmlns = "http://www.w3.org/1999/xhtml",
    mathns = "http://www.w3.org/1998/Math/MathML";

    svgInteractions = {};

    svgInteractions[containerId] = "I am " + containerId;
    console.log(svgInteractions);

    return function () {
        console.log(svgInteractions);
    }
};
var svg1 = svgInteraction("container_1");
var svg2 = svgInteraction("container_2");
问题在于,对于svgInteraction的每次初始化,svgInteractions对象都会重新初始化

它输出:

Object { container_1="I am container_1"}
Object { container_2="I am container_2"}
有没有办法把旧的价值观保存在里面


谢谢

不要在每次调用函数(
svgInteractions={}
)时将其设置为空对象

试试这个

var svgInteraction = (function() {

   var svgInteractions = {};

   return function(containerId) {
     // Implementation
   }

})();

在这里,
svgInteractions
被封装,但是对于
svgInteraction

的所有调用,它也是静态的。不要在每次调用函数(
svgInteractions={}
)时将其设置为空对象

试试这个

var svgInteraction = (function() {

   var svgInteractions = {};

   return function(containerId) {
     // Implementation
   }

})();

在这里,
svgInteractions
是封装的,但是对
svgInteraction
的所有调用也是静态的,谢谢。所有的实现代码都应该在返回函数里面,对吗?它就像一个init()?另一个问题:如何为每次初始化保留独立变量/函数?例如,我希望根据容器执行不同的“单击”功能。我在考虑类似于
svgInteractions[containerId].clickfunction=function(){…}
@GavanCatalin是的,你是对的。每次调用需要初始化的任何内容都应该在函数体中。谢谢。所有的实现代码都应该在返回函数里面,对吗?它就像一个init()?另一个问题:如何为每次初始化保留独立变量/函数?例如,我希望根据容器执行不同的“单击”功能。我在考虑类似于
svgInteractions[containerId].clickfunction=function(){…}
@GavanCatalin是的,你是对的。每次调用需要初始化的任何内容都应该在函数体中。