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