gpt4 book ai didi

Javascript 变量声明问题

转载 作者:行者123 更新时间:2023-11-28 16:23:56 28 4
gpt4 key购买 nike

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 + "<br/>" + StarsX + "<br/>" + StarsY + "<br/>" + Starsm + "<br/>" + StarsmX + "<br/>" + StarsmY;}

//cycles through the "for" loop and posts the variables
function newpost(){
for (var i=0;i<Stars.length;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 的某种基本功能,这让我很担心。

有人可以帮忙吗?

最佳答案

它没有向变量添加任何内容。它正在添加到数组中,并且两个变量都引用同一个数组对象。

这是因为在 JavaScript 中,您只能保存对象的引用,而不是对象本身。所以对数组的引用是被复制的值,而不是数组。

如果您想要数组的浅克隆,请使用slice()

var Starsm = Stars.slice()
var StarsmX = StarsX.slice()
var StarsmY = StarsY.slice()

或者就像你说的那样,创建空数组。

关于Javascript 变量声明问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663654/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com