Задать вопрос

Как работает именованный аргумент функции в JS?

Имеется следующий код :
options = {
    width: 10,
    height: 20,
    contents: 'some text'
};

function show(options) {
    var width = options.width || "";
    var height = options.height || "";
    var contents = options.contents || "Предупреждение";
    return width + height + contents;
}

console.log(show({
    contents: 'Другой текст'
}));

Интересно, почему в функции не присваиваются значения из объекта options ?
  • Вопрос задан
  • 1030 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
options, которым даёте значение в начале, и options внутри функции – это две разные штуки. Разберитесь с «областью видимости» переменных в JavaScript. Внутри функции как бы объявляется собственная версия переменной options, значение которой передаётся в функцию при её вызове.

Для читаемости назовите аргумент функции иначе, например, opts – и всё встанет на свои места:

options = {
    width: 10,
    height: 20,
    contents: 'some text'
};

function show(opts) {
    var width = opts.width || "";
    var height = opts.height || "";
    var contents = opts.contents || "Предупреждение";
    return width + height + contents;
}

console.log(show( options)); // 30some text
options.contents = 'Другой текст';
console.log(show( options)); // 30Другой текст


p.s. почему "30", а не "1020"? Берётся число 10, к нему прибавляется число 20, результат – число. Потом к числу прибавляется строка, тут уже действует сложение строк (конкатенация). Чтобы с самого начала складывались строки начните с пустой строки: '' + width + height + contents
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Sad_Bro
На темной стороне.
вы передаете не options в console.log(), а совершенно другой объект.
вот так туда попадет options
console.log(show(options));
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Почему оно должно-то?
https://maxello.gitbooks.io/js-note/content/04_fun...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы