Будет ли данное действие корректным в JavaScript?

289
03 мая 2017, 11:10

Я пишу вот такой код:

function setvar(varname) {
var varname = '1';
}
setvar('itemnumber');
document.getElementById("items").innerHTML = itemnumber;

Будет ли он работать?

Answer 1

нет, var имеет область видимость только внутри функции (глобальная область, если переменная объявлена глобально).

кстати, у вас два раза объявлена переменная varname внутри функции. второе объявление лишнее.

function setvar(varname) { //неявный var
    varname = '1'; //здесь var проигнорируется
}

чтобы ваш код заработал, функцию нужно написать так:

function setvar(varname) {
    window[varname] = '1';
}
setvar('itemnumber');
document.getElementById("items").innerHTML = itemnumber; //берется из window
Answer 2

Параметры функции имеют область видимости функции. Поэтому если аргумент является одним из примитивных типов, то его изменения внутри функции не будут влиять на сам исходный аргумент.

Поэтому в этом определении функции

function setvar(varname) {
var varname = '1';
}

исходный аргумент, переданный в качестве значения параметр varname, не будет изменен.

Кроме того, вы передаете в функцию строковый литерал, а не переменную, объявленную вне функции

setvar('itemnumber');

Поэтому данное предложение

document.getElementById("items").innerHTML = itemnumber;

не имеет смысла, так как переменной itemnumber не существует.

Вы могли бы создать объект, и его передавать вместе с названием свойства в функцию. Например,

function setvar(obj, varname) {
    obj[varname] = '1';
}
var obj = {};
setvar(obj, 'itemnumber');
document.getElementById("items").innerHTML = obj.itemnumber;
READ ALSO
Не могу понять кусок кода

Не могу понять кусок кода

Решил разобрать маленький фреймворк Sortable (для сортировки элементов на странице) и не могу понять небольшой кусок кода

407
БЭМ Не актуальная документация

БЭМ Не актуальная документация

Документация по синтаксису шаблонов, шаблонизатора bem-xjst, предикатыК первому подпредикату показан и объяснен пример, который не работает

276
Как начать массив в js с 1

Как начать массив в js с 1

То есть мне нужно что бы массив в js начинался не с 0, а с 1При этом не удаляю никаких элементов

312
Проверка наличия изображения

Проверка наличия изображения

Всем приветПодскажите, есть ли способ проверки ссылки на изображение через JS?

243