出于某种原因,我不能在不使用.push()
的情况下将任何内容分配给全局数组。
(function() {
var globalEmail = [];
var testClear = function() {
var arr = [1, 2, 3];
if (globalEmail.length > 1) {
globalEmail = [];
}
else {
globalEmail = arr;
}
};
window.globalEmail = globalEmail;
window.testClear = testClear;
})();
如果我在控制台中呼叫testClear()
然后globalEmail
,则globalEmail
保持不变。
答案 0 :(得分:2)
答案 1 :(得分:1)
如评论中所述,您在此处丢失了引用,因为您将globalEmail
分配给新数组,因此window.globalEmail与新的globalEmail数组不同。
您需要修改数组(对于您的示例,使用splice
和concat
)。
答案 2 :(得分:0)
您希望将globalEmail变量定义为全局变量,而不是本地变量。
(function() {
window.globalEmail = []; // this goes here
var testClear = function() {
var arr = [1, 2, 3];
if (window.globalEmail.length > 1) {
window.globalEmail = [];
}
else {
window.globalEmail = arr;
}
};
//window.globalEmail = globalEmail; <-- not here
window.testClear = testClear;
})();
window.
并非绝对必需,但函数中的var globalEmail;
定义了一个局部变量,这首先不是您想要的。
虽然,如果testClear()
的要点是清除任何数组,那么它就没有正确实现。相反,它应该采用一个参数,你可以处理该参数。
function testClear(a)
{
var arr = [1, 2, 3];
if(a.length > 1) {
a.splice(0);
}
else {
a.splice(0);
a.push.apply(a, arr);
}
}
testClear(window.globalEmail);
然后我认为testClear()
函数更有意义。
请注意,a.push.apply()
存在一些缺点,这些缺点会在大型数组上中断。有关详细信息,请参阅此处How to extend an existing JavaScript array with another array, without creating a new array?。