Форум программистов, компьютерный форум, киберфорум
DimaDima1985
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Примитив по ссылке - в JavaScript?

Запись от DimaDima1985 размещена 10.07.2021 в 16:28

В JS объекты копируются по ссылке, примитивы по значению - это база, которую учат сразу.
А что касается импортов? Настоящих, "ванильных" импортов, а не результатов сборки в один файл.

main.js
Javascript
1
2
3
import {x} from "./module.js";
console.log(x); // 5
x = 6; // TypeError: Assignment to constant variable
module.js
Javascript
1
2
let x = 5;
export {x}
Выше всё понятно. Примитивы импортируются как константы. x в main.js - это примитив, тип number, константа.

Но как вам такое:

main.js
Javascript
1
2
3
4
5
import {x, changeX} from "./module.js";
 
console.log(x); // 5
changeX(); 
console.log(x); // 10
module.js
Javascript
1
2
3
4
5
6
7
let x = 5;
 
function changeX() {
    x = 10;
}
 
export {x, changeX}
Значение "константы" поменялось!

Функция из модуля может поменять значение let-переменной из своей области видимости. И после этого значение переменной-константы изменится в принимающем файле. Получается, что примитив импортируется по ссылке.

Разумеется, если после импорта скопировать из импортированной переменной значение в новую константу, то это значение сохранится в оригинальном состоянии в новой константе.

P.S.
Теперь это у меня задачка номер 52.
Размещено в Без категории
Показов 822 Комментарии 3
Всего комментариев 3
Комментарии
  1. Старый комментарий
    Аватар для Usaga
    Цитата:
    Получается, что примитив импортируется по ссылке.
    Нет, не получается. Импортируется неявный объект, а Х является его свойством. Это как с замыканием.
    Запись от Usaga размещена 11.07.2021 в 07:36 Usaga вне форума
  2. Старый комментарий
    Цитата:
    Сообщение от Usaga Просмотреть комментарий
    Нет, не получается. Импортируется неявный объект, а Х является его свойством. Это как с замыканием.
    Я это так и предполагал, ведь и при динамическом импорте, и import * у нас объекты.
    Но "юридически" при импорте переменная - это переменная, а не свойство объекта.
    Запись от DimaDima1985 размещена 11.07.2021 в 09:42 DimaDima1985 вне форума
  3. Старый комментарий
    Сейчас проверил, для read-only свойств объекта TypeError другой пишется:
    FF: TypeError: "x" is read-only
    Chrome: TypeError: Cannot assign to read only property 'x' of object
    Запись от DimaDima1985 размещена 11.07.2021 в 10:07 DimaDima1985 вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.