我有以下js代码段,
var myloop=function(element){
...
var myValue;
element.onClick(){
//GET the first value of variable "myValue"
};
};
myloop.start();
myloop
启动时,myloop
功能的正文将执行 serverl次,本地变量 myValue
将会执行每次myloop
运行时都会更新。
在myloop
内部,我有一个事件处理程序 element.onClick()
,此事件处理程序只对局部变量的第一次更新值感兴趣myValue
。
我想问一些最有效的方式的建议,以便在处理程序中获得第一次更新的“myValue”值。
我的实现是定义一个index
和一个Array
外myloop
函数,并将所有更新的值存储在数组中,然后在处理程序中,我得到第一个元素数组是“myValue”的第一个更新值。但我不认为这是有效的,因为数组中的其余更新值是无用的。
所以,任何人都可以提供一些其他建议来在处理程序中获取myValue的第一个更新值。
答案 0 :(得分:1)
myValue
在myLoop
的范围内定义,当您在元素的onclick
内时,您将引用该变量的内存空间,而不是副本。
因此,您需要创建一个新范围来保留该引用。这不会创建副本,但由于此范围不会使用新值更新,因此它仍将引用旧值。
根据@ andy-e回答JavaScript for loop index strangeness:
var myloop=function(element){
...
var myValue;
(function (myValue) {
element.onclick = function () {
//GET the first value of variable "myValue"
}
})(myValue);
}
这是,恕我直言,解决这个问题的“正确”方法。也许更有效的方法是声明一个名为firstValue
的全局变量,当你设置myValue
时(如果更改它是一个公共属性,你可以创建一个setter),检查firstValue是null
。在这种情况下,无论如何都要替换值,不要做任何事情。