问题描述
var v2;
a=[1,2,3,2.5];
b=[
`Math.round(${v2})`
];
var v;
a.forEach( v => {
console.log(v);
v2=v;
console.log(b[0]);
}
)
当我第一次在控制台中执行代码时,v2 的内插值为“未定义”。然后我第二次执行代码,插值的值为 2.5,这是数字数组中的最后一个值。为了解决这个问题,我必须将具有模板文字的 b 数组的声明移动到 forEach 函数中。为什么 v2 未定义,然后有值?
解决方法
正如@adiga 的评论所指出的:当分配 b
时,会创建一个带有字符串的数组。该字符串接收其值,同时合并 v2
的值。 v2
从未被赋值,所以它是默认值 undefined
。
当 JavaScript 引擎运行字符串所在的语句时插入字符串;在您的情况下,当声明数组并将内容放入其中时。它产生一个不可变的字符串,就是这样——你不能有一个随时间改变或重新评估其内容的字符串。最接近的是创建一个返回该字符串的函数,因为每次调用该函数时它都会创建一个新字符串。