В вашем коде основная причина, почему первый способ не работает, скорее всего, связано с тем, что вы не задаете начальный центр и масштаб карты в момент ее инициализации. Давайте разберем каждый из них:
### Первый способ
```javascript
initMap();
async function initMap() {
await ymaps3.ready;
const { YMap, YMapDefaultSchemeLayer } = ymaps3;
const map = new YMap(document.getElementById('map'));
}
```
В этом коде вы создаете объект карты `YMap`, но не передаете в него никаких параметров, включая начальное положение и масштаб. Это может привести к тому, что карта не будет отображаться или будет отображаться некорректно.
### Второй способ
```javascript
initMap();
async function initMap() {
await ymaps3.ready;
const { YMap, YMapDefaultSchemeLayer, YMapDefaultFeaturesLayer, YMapMarker } = ymaps3;
const map = new YMap(document.getElementById('map'), {
location: {
center: [37.588144, 55.733842],
zoom: 5,
},
});
const layer = new YMapDefaultSchemeLayer();
map.addChild(layer);
}
```
Во втором варианте вы уже передаете параметры `location` с координатами центра и масштабом, что позволяет карте корректно отображаться. Это ключевой момент, который делает этот вариант рабочим.
### Как исправить первый способ
Если вы хотите, чтобы первый способ работал, просто добавьте установку начального положения и масштаба после создания карты:
```javascript
initMap();
async function initMap() {
await ymaps3.ready;
const { YMap, YMapDefaultSchemeLayer } = ymaps3;
const map = new YMap(document.getElementById('map'));
// Установка начальных координат и масштаба
map.setLocation({
center: [37.588144, 55.733842],
zoom: 5
});
const layer = new YMapDefaultSchemeLayer();
map.addChild(layer);
}
```
Теперь ваш код будет работать аналогично второму способу, и вы сможете задавать начальные координаты и масштаб карты отдельно от ее инициализации.