Чи можна використовувати змінну у файлі, який називається first.js
всередині іншого файла second.js
?
first.js
містить змінну, що називається colorcodes
.
Чи можна використовувати змінну у файлі, який називається first.js
всередині іншого файла second.js
?
first.js
містить змінну, що називається colorcodes
.
Відповіді:
Як сказав Фермін, змінна в загальному масштабі повинна бути доступною для всіх скриптів, завантажених після її оголошення. Ви також можете використовувати властивість window
або (у глобальному масштабі), this
щоб отримати такий же ефект.
// first.js
var colorCodes = {
back : "#fff",
front : "#888",
side : "#369"
};
... в іншому файлі ...
// second.js
alert (colorCodes.back); // alerts `#fff`
... у вашому HTML-файлі ...
<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>
window
є глобальна сфера застосування - тому window.colorCodes і (глобальний) об'єкт colorCodes - це той самий об'єкт.
<script>var variable1 = true;</script> <script src="first.js"></script>
first.js побачить цю змінну? Я протестував його в розширенні Google Chrome, і він не спрацював
/* global colorCodes */
у рядок вище, щоб запобігти "... не визначено" повідомлення про помилку
Ви можете експортувати змінну з першого файлу за допомогою експорту .
//first.js
const colorCode = {
black: "#000",
white: "#fff"
};
export { colorCode };
Потім імпортуйте змінну у другий файл, використовуючи import .
//second.js
import { colorCode } from './first.js'
Це повинно працювати - визначте глобальну змінну у першому файлі та отримайте доступ до неї з другого файлу:
<script src="/firstfile.js"></script>
<script src="/secondfile.js"></script>
firstfile.js:
var colors = {
text:'#000000',
background:'#aaaaaa',
something_else:'blue'
};
secondfile.js:
do_something_with(colors.background);
Зауважте, що порядок завантаження файлів скриптів є важливим для деяких браузерів (IE6 точно, можливо, інших)
За допомогою Node.js ви можете експортувати змінну через модуль.
//first.js
const colorCode = {
black: "#000",
white: "#fff"
};
module.exports = { colorCode };
Потім імпортуйте модуль / змінну у другий файл, використовуючи затребувану.
//second.js
const { colorCode } = require('./first.js')
Ви можете використовувати import
та export
з aproach з ES6 за допомогою Webpack / Babel, але в Node.js потрібно включити прапор і використовує розширення .mjs.
Я натрапив на amplify.js . Це дуже просто у використанні. Щоб зберегти значення, назвемо його "myValue", ви зробите:
amplify.store("myKey", "myValue")
І щоб отримати доступ до цього, ви робите
amplify.store("myKey")
Я, можливо, роблю це дещо інакше. Я не впевнений, чому я використовую цей синтаксис, скопіював його з якоїсь книги дуже давно. Але кожен мій js-файл визначає змінну. Перший файл, без жодної причини, називається R:
var R =
{
somevar: 0,
othervar: -1,
init: function() {
...
} // end init function
somefunction: function(somearg) {
...
} // end somefunction
...
}; // end variable R definition
$( window ).load(function() {
R.init();
})
І тоді, якщо у мене є великий фрагмент коду, який я хочу відокремити, я поміщую його в окремий файл та інше ім'я змінної, але все ще можу посилатись на R-змінні та функції. Я зателефонував до нової ТД без поважних причин:
var TD =
{
xvar: 0,
yvar: -1,
init: function() {
...
} // end init function
sepfunction: function() {
...
R.somefunction(xvar);
...
} // end somefunction
...
}; // end variable TD definition
$( window ).load(function() {
TD.init();
})
Ви можете бачити, що де в TD 'сепфункції' я називаю R.somefunction. Я розумію, що це не дає ефективності виконання, оскільки обидва сценарію потрібно завантажити, але це допомагає мені організувати свій код.
Один найкращий спосіб - за допомогою вікна. INITIAL_STATE
<script src="/firstfile.js">
// first.js
window.__INITIAL_STATE__ = {
back : "#fff",
front : "#888",
side : "#369"
};
</script>
<script src="/secondfile.js">
//second.js
console.log(window.__INITIAL_STATE__)
alert (window.__INITIAL_STATE__);
</script>
<script src="http://datasource.example.net/first.js"></script><script src="second.js"></script>