Почему jQuery не может получить доступ к этой импортированной глобальной переменной? - PullRequest
0 голосов
/ 12 октября 2019

Попытка изменить глобально определенную переменную, которую я импортировал в jQuery, вызывает ошибку ссылки:

global.js

export var w = window.innerWidth;

main.js

import {w} from './global.js';
console.log(w);
$(document).ready(function(){
    ...
    console.log(w);
    w = window.innerWidth;
    console.log(w);
});

Первые две консоли выводят значение, но третья дает

main.js:31 Uncaught ReferenceError: w is not defined

Это как-то связано с веб-пакетом? Я вижу это в инструментах разработчика:

console.log(_global_js__WEBPACK_IMPORTED_MODULE_3__["w"]);
w = window.innerWidth;
console.log(w);

Как будто это не та же самая переменная, но как мне сделать, чтобы jQuery установил переменную webpack?

1 Ответ

0 голосов
/ 12 октября 2019

В модульной системе ES6 вы не можете переназначить импортированное значение из другого модуля. Импортированные значения доступны только для чтения других модулей. Вот как это должно быть. В противном случае потребитель может изменить значение провайдера без ведома провайдера.

Однако вы можете изменить способ самого провайдера:

global.js: provider

var w = window.innerWidth;
var changeW = function(newValue) {
   w = newValue;
}
export { w, changeW }

в main.js:

import {w,changeW} from './global.js';
console.log(w);
$(document).ready(function(){
...
   console.log(w);
   changeW(window.innerWidth); //call method to change value
   console.log(w);
});
...