Строки не являются изменяемыми в JavaScript, str+=something
- это краткая форма для str=str+something
, где правая сторона создает новую строку, а затем она сохраняется в локальной переменной str
без изменения оригинала. строки (они остаются доступными и неизменными снаружи).
Вы можете return
результат, если вы хотите, чтобы он был виден снаружи:
function test(a,b){
console.log("before a,b:",a,b);
a+=b;
console.log("after a,b:",a,b);
return a;
}
var x="x";
var y="y";
var z=test(x,y);
console.log("x,y,z:",x,y,z);
Таким образом, ваша функция может быть
function concOperator(str, operator) {
str += currentNumber + ' ' + operator + ' ';
return str;
}
или просто
function concOperator(str, operator) {
return currentNumber + ' ' + operator + ' ';
}
и в обоих случаях вам придется хранить возвращаемую строку снаружи (только что с z
выше).
В качестве альтернативы вы можете творить магию с объектами:
function test(a,b){
console.log("before a:",a);
console.log("before b:",b);
a.data+=b;
console.log("after a:",a);
console.log("after b:",b);
}
var x={data:"x"};
var y="y";
test(x,y);
console.log("x has changed:",x);
Поскольку объекты (например, x
во втором фрагменте) являются изменяемыми.