Использование глобальных переменных - это, вообще говоря, плохая практика, независимо от того, какой язык вы выбрали. Их даже (легко) не разрешено использовать в строгом режиме 1002 *, что я настоятельно рекомендую.
Рассмотрим этот фрагмент кода, который я нашел:
if (typeof session != 'undefined' && !data.cart.request_status)
data.input_definitions.passengers =
inflate_passenger(session, data.input_definitions.passengers);
Мне нужно было обернуться и спросить у программиста-флоу, откуда взялась эта переменная session
, так как поиск кода не показал, где был установлен.
У меня еще один пакет от компании устанавливает глобальную переменную.
Код это как шутка: если вам нужно это объяснить, это, вероятно, не так уж и хорошо.
Обходной путь с использованием ES6:
Если в Node, используйте import
или require
, чтобы ввести желаемый материал в лексическую сферу, не позволяйте людям трогать вашу глобальную среду без вашего ведома.
import {Sesssion} from 'api-core';
const Session = require('api-core').session;
Если вы находитесь во внешнем интерфейсе, предоставляющем код для браузера, вы не сможете использовать import
, если не перенесете свой код ES6 с помощью Babel .
Пример переноса с использованием Gulp.js:
// $ npm install --save-dev gulp-babel babel-preset-es2015
// gulpfile.js
const gulp = require('gulp');
const babel = require('gulp-babel');
gulp.task('transpile', () => {
return gulp.src('src/app.js')
.pipe(babel({presets: ['es2015']}))
.pipe(gulp.dest('dist'));
});
// $ gulp transpile
Устаревшее решение:
Когда использование функций ES6 - не вариант, единственный способ обойти использование набора глобальных переменных - использовать только одну и надеяться:
// scripts/app.js
var MyApp = {
globals: {
foo: "bar",
fizz: "buzz"
}
};