使用数组的回调函数,该函数是否使用更新后的数组?
callback function using an array, does the function use the updated array?
我正在调试我的代码,我似乎无法弄清楚哪里出了问题。因此,我只是仔细检查我对 javascript.
的理解
如果我有以下情况:
var myArray = []
$(document).on('mousemove', function(e){
if (myArray.length > 0) {
//do something
} else {
//do other thing
}
});
如果我随后在我的代码中 myArray
中的 push/pop 项,我是否必须删除并重新添加 on mousemove 侦听器?或者 mousemove 会使用正确的引用吗?
JavaScript 中的所有对象(Arrays
都是对象)都是通过引用传递的。只要在范围内,您对 myArray
所做的任何更改都将更改单个 myArray
实例。有没有回调也没关系
如果这是您想要的结果,那么您就完成了。如果没有,您可以创建一个新数组并根据需要使用它。如果您需要 myArray
中的内容,您可以像这样创建数组的浅表副本:
var newArr = myArray.slice(0);
不,您不必删除并重新添加 mousemovelistener,您的数组在更高的范围内(在您的情况下是全局变量),因此在 mousemovelistener 和外部范围之间共享相同的引用。
我正在调试我的代码,我似乎无法弄清楚哪里出了问题。因此,我只是仔细检查我对 javascript.
的理解如果我有以下情况:
var myArray = []
$(document).on('mousemove', function(e){
if (myArray.length > 0) {
//do something
} else {
//do other thing
}
});
如果我随后在我的代码中 myArray
中的 push/pop 项,我是否必须删除并重新添加 on mousemove 侦听器?或者 mousemove 会使用正确的引用吗?
JavaScript 中的所有对象(Arrays
都是对象)都是通过引用传递的。只要在范围内,您对 myArray
所做的任何更改都将更改单个 myArray
实例。有没有回调也没关系
如果这是您想要的结果,那么您就完成了。如果没有,您可以创建一个新数组并根据需要使用它。如果您需要 myArray
中的内容,您可以像这样创建数组的浅表副本:
var newArr = myArray.slice(0);
不,您不必删除并重新添加 mousemovelistener,您的数组在更高的范围内(在您的情况下是全局变量),因此在 mousemovelistener 和外部范围之间共享相同的引用。