1 Востаннє редагувалося 221VOLT (04.11.2019 04:41:27)

Тема: js is "awesome"

"use strict";

const date0 = new Date(2019, 11, 4, 3, 20, 15, 0);

function name1(){
  console.log(date0);
  
  // some code
  
  console.log(date0);
}

// other code

в консолі

Date Wed Dec 04 2019 03:20:15 GMT+0200 (за східноєвропейським стандартним часом)
Date Fri Dec 06 2019 08:20:15 GMT+0200 (за східноєвропейським стандартним часом)

запитання --
яка користь від strict та "незмінних контант", якщо вони все-ж-таки змінюються?


*SCRATCH* при чому я поки не зрозумів, де саме ця контанта неявно змінюється


Прихований текст

здається, прийшла пора перейти на Elm та забути про js

Прихований текст

ні! у мене немає визначення такої ж локальної змінної

  console.log(date0);
  for(let i=0;i < 22;i++){
    // date0 -- server's datetime
    setTimerById(i);
    // year, month, day, hours, minutes, seconds
    lastTime[i] = ['', '', '', '', '', ''];
    updateOneClock(i);
  }
  console.log(date0);

2 Востаннє редагувалося koala (04.11.2019 08:41:57)

Re: js is "awesome"

Date, як добре видно з new - це Object. Об'єкти в JS зберігаються за посиланням. Відповідно, const стосується посилання, а не об'єкта, на який воно посилається:

const date0 = new Date(2019, 11, 4, 3, 20, 15, 0);
date0 = some_other_date;//помилка
date0.x = 5; //нормально, date0 не змінився, змінився об'єкт
date0.setYear(2010); //змінили рік

Для об'єктів є чудова функція Object.freeze, яка забороняє зміну властивостей:

const date0 = Object.freeze(new Date(2019, 11, 4, 3, 20, 15, 0));
date0 = some_other_date;//помилка
date0.x = 5; //помилки немає, але date0.x не створено
date0.setYear(2010); //змінили рік

Ой, дата зберігається у внутрішньому стані, а внутрішній стан - це не властивість.

Далі, якщо хочете, лізьте на https://stackoverflow.com/questions/349 … cript-date і дивіться, як там через рефлексії вбивають всі функції на set, якщо вам воно ще треба.

Подякували: 221VOLT, leofun012

3

Re: js is "awesome"

дякую)

про Object.freeze не знав :)

я уже забив на ті об'єкти, зробив годиннички за допомогою timestamp  [:}

Прихований текст

і так купу часу вбив, зараз би ще далі з тими об'єктами мучатись...((
одні розумні наляпали як-попало всякого на купу, і назвали то мовою програмування
інші з тими мучаються...((

сплю і бачу, як в браузер завезуть справжню мову програмування --
ФП зі справді чистими функціями, типу erlang/haskell, а не оце все...
Elm трохи недотягує до ідеальної -- компіляція, порти... (хоча це я уже просто бурчу)