[28/28] Дом, который построил Кекс

https://htmlacademy.ru/courses/217/run/28

Код
var materialPrice = {
  'wood': 1000,
  'stone': 1500,
  'brick': 2000
};

var house = {
  rooms: 10,
  floors: 5,
  material: 'wood',
  coefficient: 10.5,
  calculateSquare: function() {
    square = this.rooms * this.coefficient * this.floors;
    return square;
  },
  calculatePrice: function(material) {
    price = square * materialPrice[this.material];
    return price;
  }
};

Вопрос: почему переменные square и price не потребовалось объявлять?

Еще вопросы по курсу:

  1. https://htmlacademy.ru/courses/217/run/11
    Название массива winners внутри функции совпадает с названием переменной снаружи.
  2. https://htmlacademy.ru/courses/217/run/12
    В тексте первой цели сказано: «В теле функции getWinners, после объявления переменной winners…» Но внутри функции объявлен массив с таким именем. Переменная по коду ниже.
  3. https://htmlacademy.ru/courses/217/run/21
    Имя объекта внутри функции снова совпадает с именем переменной снаружи. Если это намеренно сделано, то с какой целью?
1 лайк

Здравствуйте.

В 12 задании цель сформулирована специально максимально подробно. Речь идёт именно о переменной внутри функции.

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

2 лайка
Code

var materialPrice = {
‘wood’: 1000,
‘stone’: 1500,
‘brick’: 2000
};

var house = {
rooms: 10,
floors: 5,
material: ‘wood’,
coefficient: 10.5,

calculateSquare: function () {
return this.rooms * this.coefficient * this.floors;
},

calculatePrice: function() {
return this.calculateSquare() * materialPrice[this.material];
}
};

1 лайк

Ушло пару минут)

code

var area;
var price;

var materialPrice = {
‘wood’: 1000,
‘stone’: 1500,
‘brick’: 2000
};

var house = {
rooms: 10,
floors: 5,
material: ‘wood’,
coefficient: 10.5,

calculateSquare: function () {
area = this.rooms * this.coefficient * this.floors;
return area;
},

calculatePrice: function () {
price = area * materialPrice[this.material];
return price;
}
};

а когда будут новые курсы по js?) в этом месяце будет?

и просьба оглавление делать не такое “веселое”, если что-то нужно повторить, то с ума сойдешь пока найдешь необходимое!

4 лайка

Скоро выйдет новый курс, следите за анонсами)
про названия я вас услышала)

так и не понял почему переменные price и square не пришлось объявлять

2 лайка

Здесь подробно описано почему, вкладка Внешние переменные :smirk:
https://learn.javascript.ru/function-basics

1 лайк

Ваш код не правильный.

Тоже не понял, почему переменные не объявлены, и решил обойтись)
А зачем нужно было вводить в calculatePrice параметр материала?..

минимал
var materialPrice = {
  'wood': 1000,
  'stone': 1500,
  'brick': 2000
};

var house = {
  rooms: 10,
  floors: 5,
  material: 'wood',
  coefficient: 10.5,
  calculateSquare: function () {
      return this.rooms * this.floors * this.coefficient;
                               },
  calculatePrice: function () {
      return this.calculateSquare() * materialPrice[this.material];
                              }                             
};
console.log(house.calculateSquare());
console.log(house.calculatePrice());
1 лайк

Так же не понял про объявление переменных. Я понял, что есть внешние и локальные, но я не вижу в коде, где у Ineska объявлены они снаружи вот в чем дело … + так же не ясно про параметр материала…:thinking:
P.s. Решил тоже без доп.переменных обойтись :slight_smile:

Дом, который построил Кекс
var materialPrice = {
  'wood': 1000,
  'stone': 1500,
  'brick': 2000
};

var house = {
  rooms: 10,
  floors: 5,
  material: 'wood',
  coefficient: 10.5,
  calculateSquare: function() {
    return this.rooms * this.coefficient * this.floors;
  },
  calculatePrice: function() {
    return house.calculateSquare() * materialPrice[this.material];
  }
};

Видимо справедлива пословица «обещанного три года ждут»)
Прохожу JS-1 и ничего не поменялось в плане нейминга заданий)

Почему не требуется использовать функцию которая будет получать значения этажей и так далее?

let materialPrice = {
‘wood’: 1000,
‘stone’: 1500,
‘brick’: 2000
};

let house = {
rooms: 10,
floors: 5,
material: ‘wood’,
coefficient: 10.5,

calculateSquare: () => {
return (house.rooms * house.coefficient) * house.floors;
},

calculatePrice: () => {
return house.calculateSquare() * materialPrice[house.material];
},
};

1 лайк

Микро-рефакторинг: все house можно заменить на this, лишние скобки тут return (house.rooms * house.coefficient)

1 лайк