我基本上想获得颜色的单个r,g,b值并将其存储在对象中,以便可以访问单个值。 split函数拆分变量colorVar的rgb值,并希望在下面提供的其他函数中调用varHolder。但是,当我想在console.log中显示该值时,它会以未定义的错误进行标记。
我试图使lineObj全局变量,但没有用。
function comparision(){
split(colorL,lineObj);
console.log('---------get-------');
//This log doesn't work
console.log(lineObj.r);
}
function split(colorVar,varHolder){
colorRgb = colorVar.slice(colorVar.indexOf('(') + 1, colorVar.indexOf(')'));
var colorArr = colorRgb.split(','),
i = colorArr.length;
while (i--)
{
colorArr[i] = parseInt(colorArr[i], 10);
}
varHolder = {
r: colorArr[0],
g: colorArr[1],
b: colorArr[2],
a: colorArr[3]
}
//The below log works.
console.log('-----------Split-------')
console.log(varHolder.r);
}
最佳答案
在split()
中更改的值不会传播回调用函数comaprison()
,因为参数varHolder是按值传递,而不是按引用传递。这意味着对函数内变量的任何更改仅是该函数的局部变量。要解决此问题,您必须将新变量return
添加到外部函数。
varHolder = {
r: colorArr[0],
g: colorArr[1],
b: colorArr[2],
a: colorArr[3]
}
//The below log works.
console.log('-----------Split-------')
console.log(varHolder.r);
return varHolder;
}
function comparision(){
lineObj = split(colorL,lineObj);
console.log('---------get-------');
//This log doesn't work
console.log(lineObj.r);
}
如果这是您的完整代码,则可以通过从函数中完全删除
varHolder
参数来进一步简化操作,因为该函数从不使用它,而是将其分配给新变量。例如:lineObj = split(lineObj);
function split(colorVar){
...
}
另请参见:Is JavaScript a pass-by-reference or pass-by-value language?