@name1e55

Присвоить значение через аргумент?

var text = "list-style-image"; to_low_camel(text); 
alert(text); // "list-style-image"

function to_low_camel(str) {
	var arr = str.split("-");
    
	for (i = 1; i < arr.length; i++) {
		arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
        
	} str = arr.join("");
}


Если записать как text = arr.join("") выводит // "listStyleImage"
Через return arr.join("") тоже // "listStyleImage"
typeof arr.join("") // "string"

Не могу понять, почему не присваивает новое значение через аргумент?
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
@dmitriyivvvv
Вы передаете строку в функцию, это примитивное значение всего их 6: String, Number, Boolean, Symbol, null, undefined. Создается копия вашей строки которая присваивается параметру str. Если бы вы передали объект Object(или подтип объекта Function, Array, etc), тогда параметру присваивается ссылка на этот объект. напрмер:
let o = {a: 3}; //ссылка на объект
function foo(obj) {
  //obj это другая ссылка на этот же объект
  obj = {a:666} //теперь obj указывает на совсем другой объект
}
foo(o)
o // {a:3}

Т.е в js нельзя вручную указать хотите ли вы ссылку или копию (как в C++ например), здесь ссылка/копия значения определяется типом данных.
Если с англ. норм то почитайте: раздел Value vs. Reference
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MaxLevs
@MaxLevs
Использовать ссылочные типы.
let bufer = {};
function foo(buf, a, b) {
    buf.foo_ans = a + b;
}
function bar(buf, a, b) {
    buf.bar_ans = a * b;
}
foo(bufer, 3, 5);
bar(bufer, 3, 5);
console.log(bufer); //{foo_ans: 8, bar_ans: 15}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы