• Почему при изменении объекта он не меняется в массиве?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Вот это переменная:
    let obj
    А вот это сам объект:
    {
        name:"object"
    }

    Соответственно вот тут:
    obj = null
    Присваивается значение переменной, а не объекту.
    Ответ написан
    7 комментариев
  • Почему консольное приложение С# созданое в VS Code выглядит нестандартно?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Из-за того что модератор вполне оправданно удалил скриншоты - предположу, что там был вот такой код:
    Console.WriteLine("Hello World!");
    А в большинстве руководств ты видишь примерно такой код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace MyApp
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
            }
        }
    }

    VS Code тут ни при чём.
    У тебя всего одна строчка кода и она при этом работает благодаря двум фичам, которые ввели в C# 9 и 10:
    1. Top-level statements - позволяет не объявлять класс со статичным методом Main - вместо этого в одном любом из файлов можно сразу начать писать код для выполнения и компилятор будет считать код в этом файле за точку входа
    https://learn.microsoft.com/en-us/dotnet/csharp/fu...
    2. Global Using Directive - можно написать global using Namespace; и этот неймспейс будет неявно подключен ко всем файлам в проекте. Также можно написать <Using Include="Namespace" /> в csproj-файле для аналогичного эффекта. Некоторое количество таких глобальных включений уже настроено по-умолчанию на уровне SDK.
    https://learn.microsoft.com/en-us/dotnet/csharp/la...

    Соответственно в .NET 7 переделали шаблон на именно такой, чтобы упростить вход для новичков и приучить к новому стилю.
    В других источниках ты видишь другой код, тк в тех источниках он был написан до выхода .NET 7.

    Старый синтаксис никто не убирал - он всё ещё работает, если тебе очень нужно, но вот шаблон придётся установить отдельно, если ты хочешь, чтобы новые проекты создавались со старым синтаксисом.
    (Но уверяю тебя - тебе это не нужно)
    Ответ написан
    Комментировать
  • Почему d[0] не изменяется?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Дак а чего вдруг ему меняться то?
    Давайте по шагам:
    // В первой строчке 3 шага
    // 1) Создался новый массив
    // 2) Создался новый объект {x:1}, и ссылка на него легла в первый элемент массива из шага 1.
    // 3) В переменную "const c" положилась ссылка на массив из шага 1.
    const c = [{x:1}]
    // Вторая строчка так же содержит 3 шага
    // 4) Создаётся новый массив
    // 5) По ссылке массив "с" спрэдится. Т.о. первым элементом нового массива становится ссылка на объект из шага 2.
    // 6) Ссылка на новый массив но со "старым" объектом кладётся в переменную "d"
    const d = [...c] 
    // Третья упрощённо имеет 1 шаг
    // 7) в массив из переменной с именем "c" в первый элемент кладётся новое значение. Причём совершенно не важно какое.
    c[0]=100;

    На этом всё.
    Таким образом получаем, что в массиве c в элементе с индексом 0 у нас число, а в массиве b в элементе с индексом 0 у нас ссылка на объект созданный на втором шаге.
    Ответ написан
    Комментировать
  • Почему d[0] не изменяется?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Объекты в JS копируются по ссылке. Таким образом, при декомпозиции массива c в d вы копируете ссылку на объект. В результате c[0] и d[0] содержат ссылку на один и тот же объект { x: 1 }.
    Когда вы меняете свойство x, то изменения проводятся в экземпляре объекта по ссылке. При этом в массивах по прежнему находится одна и та же ссылка.
    Когда вы меняете значение элемента массива c[0], то в массиве c находится новое значение, а в массиве d по прежнему хранится ссылка на объект.
    Да, и массивы здесь не при чём. То же самое можно продемонстрировать и с обычными переменными:
    a = { x: 1 };
    b = a;
    b.x = 100;
    a; \\ { x: 100 }
    b; \\ { x: 100 }
    b = 100;
    a; \\ { x: 100 }
    b; \\ 100
    Вот вам ещё пример ссылок:
    a = { x: 1 };
    b = a;
    c = { x: 1 };
    a === b; // true
    a === c; // false
    Ответ написан
    Комментировать
  • Как работает замыкание в js?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    function createCounter() { 
        let counter =0; 
       counter = counter - 10  
        const myFunction = function () { 
            counter = counter+1; 
            return counter 
        } 
        return myFunction 
    } 
    let z = createCounter() // Вернули в переменную z функцию "myFunction" у которой в замыкании есть counter.
    // counter внутри на данный момент равен -10.
    
    // Вызвали функцию и вывели результат в консоль.
    // Так как внутри функции counter берётся из замыкания, то при вызове функции получаем
    // -10 + 1
    console.log(z()) // -9
    
    // В данном примере - бесполезный ничего не делающий вызов.
    // То есть создаётся ещё один НОВЫЙ счётчик, со своим замыканием, но он никуда не сохраняется.
    createCounter() 
    
    // Снова вызвали функцию и вывели результат в консоль.
    // -9 + 1 
    console.log(z()) //  -8


    где я допускаю ошибку

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

    Второй вопрос откуда берется counter при втором вызове console.log(z())

    Да всё оттуда же. Из замыкания. Когда Вы в первый раз вызвали функцию createCounter и сохранили результат её работы в переменную z - Вы в переменную z поместили функцию myFunction, у которой есть своё собственное замыкание на counter.
    При каждом вызове z() будет вызываться та созданная функция со своим замыканием и оперировать с counter из него.

    При новом вызове createCounter возвращается НОВАЯ функция myFunction у которой своё независимое от предыдущих вызовов замыкание.
    То есть createFunction это как фабрика, которая выпускает одинаковые изделия(счётчики от -10, в данном случае), но изделия не зависят друг от друга.
    Ответ написан
  • Почему в консоли string?

    Mesuti
    @Mesuti
    Потому что одинарная обратная кавычка это синтаксис шаблона строк ES6
    Все внутри приводится к строке string
    Ответ написан
    Комментировать
  • Почему не работает код в браузере?

    bingumd
    @bingumd
    ...
    так должно работать

    <div class="dive"></div>
    <script src="main.js"></script>
    Ответ написан
    Комментировать
  • Где в коде ошибка?

    vabka
    @vabka
    Токсичный шарпист
    Ошибка решается внимательным чтением сообщения об ошибке.

    Как и сказано в ошибке - у переменной groundInfo (которая типа RaycastHit2D) нет поля colldier.
    Скорее всего ты хотел написать collider
    Ошибка находится на 23-ей строке:
    if (groundInfo.colldier == false) // тут.
    Но даже если исправишь опечатку - всё равно будет ошибка, тк нельзя сравнивать Collider2D и bool.
    Если хочешь проверить, столкнулся ли луч с каким-то коллайдером, то сравнивать надо с null
    Ответ написан
    8 комментариев
  • В чём различие между i++ и i+1, когда речь идёт в о массивах?

    stainless_steelrat
    @stainless_steelrat
    Д'Артаньян
    Может быть по тому, что постфиксный инкремент так работает?
    Сначала подставляется значение переменной в выражение, а только после инкрементируется.
    Используйте префиксную форму, т.е. ++i, она работает наоборот, сначала увеличивается значение, потом подставляется.
    Ответ написан
    2 комментария
  • Как выровнять форму по центру?

    Как выровнять форму вам уже написали.
    почему нижняя кнопка меньше остальных ведь ширина всем задана одинаковая
    Потому что стоит значение box-sizing: content-box. Можете прописать следующее:
    *, ::after, ::before{
      box-sizing: border-box;
    }
    Ответ написан
    Комментировать
  • Как выровнять форму по центру?

    nekoguard
    @nekoguard
    котер
    Во-первых, не указан box-sizing: border-box, поэтому инпуты были больше чем нужно, за счет паддингов и границ.
    Ну и ширину лучше задать форме, а инпутам и кнопку ширину 100%. Из-за отсутствия фиксированной ширины у формы, она занимала весь экран и не центрировалась.

    * {
      box-sizing: border-box;
    }
    
    .form {
      display: block;
      margin: 0 auto;
      width: 340px;
    }
    
    input {
      border-radius: 5px;
      width: 100%;
      height: 50px;
      border: 1px solid #bbbbbb;
      display: block;
      padding-left: 20px;
    }
            
    .btn-form {
      padding: 20px 80px;
      height: 55px;
      width: 100%;
      border: 0;
      cursor: pointer;
     }
    Ответ написан
    Комментировать
  • Как выровнять форму по центру?

    @nikita1711
    .form {
       display: flex;
       justify-content: center;
       flex-direction: column;
       align-items: center;
     }
    Ответ написан
    Комментировать
  • Как создать консольное приложение С# в VS Code?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Подходит, но лучше используй большую студию или Rider (сильно рекомендую второе. Уже три года сижу и доволен)
    Уже отвечал на такой вопрос тут (подробная инструкция по тому что и как):
    https://qna.habr.com/q/947675#answer_1889815

    PS:
    Есть ещё гайд от Microsoft:
    https://docs.microsoft.com/en-us/dotnet/core/tutor...
    Ответ написан
  • Как сохранить проект в Unity?

    @Farawa
    Все файлы, модельки, спрайты, скрипты и тд сохраняются сами, единственное что тебе нужно сохранить - это открытую сцену, сохранять ее как везде ctrl+s или предложит при закрытии проекта.
    Ответ написан
    3 комментария
  • Как переключить вкладки без дублирования файлов в vs code?

    Lynn
    @Lynn
    nginx, js, css
    "workbench.editor.revealIfOpen": true

    В настройках по-английски Workbench » Editor: RevealIfOpen.
    Думаю по слову reveal должно найтись.
    Ответ написан
    1 комментарий
  • Как переключить язык в vs code?

    vabka
    @vabka
    Токсичный шарпист
    1. ctrl+shift+p
    2. configure display language (Настройки языка интерфейса)
    Ответ написан
    Комментировать
  • Как связать поле для ввода со словом "Поиск"?

    Kurokq
    @Kurokq
    Наполни смыслом каждое мгновенье

    Обернуть <h2></h2> в <label for="search"> так же к <input type="search" name="searh">дописать id="search"
    Ответ написан
    2 комментария
  • Создание новых файлов в Sublime Text 3?

    notiv-nt
    @notiv-nt
    Как ваше ничего? Да, моё тоже
    ctrl shift p > toggle tabs
    Ответ написан
    Комментировать
  • Почему не работают значения свойства font?

    @L1nks
    По спецификации последним должно идти font-family
    Ответ написан
    2 комментария