var Stars = new Array(1,2,3,4,5,6,7,8,9,10);
var StarsX = new Array(451,455,460,470,490,100,160,220,280,300);
var StarsY = new Array(451,455,460,470,490,480,390,330,200,120);
var Starsm = Stars
var StarsmX = StarsX
var StarsmY = StarsY
//just shows the output of the variables in a text field
function contpost(){Tfield.innerHTML=Stars + "
" + StarsX + "
" + StarsY + "
" + Starsm + "
" + StarsmX + "
" + StarsmY;}
//cycles through the "for" loop and posts the variables
function newpost(){
for (var i=0;i<>
StarsmX[i] = StarsX[i] + 10;
StarsmY[i] = StarsY[i] + 10;
}
contpost()
}
var Tfield= (This is the text field)
var canv_one= (This is a canvas in my document)
canv_one.addEventListener('click', newpost);
如果我运行此代码 (Firefox 9),if/then 循环会将 10 添加到“mX”变量和“X”变量。
我现在大概知道它是如何做到的了。这只是因为我很早就将它们设置为相等。当我在声明中替换它时,它可以正常工作:
var Starsm = new Array()
var StarsmX = new Array()
var StarsmY = new Array()
我不明白的是为什么 javascript 这样做。对我来说,这似乎是合乎逻辑的,如果你在全局声明期间将它们设置为相等一次,它们以后就不会重新相等(并且向后做。我从来没有将 StarsX 设置为等于 StarsmX。)
我很确定这意味着我不理解 Javascript 的某种基本功能,这让我很担心。
Có ai có thể giúp được không?
它没有向变量添加任何内容。它正在添加到数组中,并且两个变量都引用同一个数组对象。
这是因为在 JavaScript 中,您只能保存对象的引用,而不是对象本身。所以对数组的引用是被复制的值,而不是数组。
如果您想要数组的浅克隆,请使用slice()
.
var Starsm = Stars.slice()
var StarsmX = StarsX.slice()
var StarsmY = StarsY.slice()
或者就像你说的那样,创建空数组。
Tôi là một lập trình viên xuất sắc, rất giỏi!