Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   подключение скриптов друг к другу ... (https://javascript.ru/forum/misc/40961-podklyuchenie-skriptov-drug-k-drugu.html)

Arramis 26.08.2013 13:28

подключение скриптов друг к другу ...
 
Возникла острая необходимость подключить внешний скрипт к текущему так, чтобы он имел доступ к переменным и функциям в другой функции текущего скрипта.
Собственно, рассуждая логически, внешний скрипт нужно загружать непосредственно внутри функции текущего скрипта -
тоесть допустим имеем главный скрипт
main.js
// здесь идет произвольный код
// далее некая сразу выполняющаяся функция 
(function() {                // это главная функция
     var a = 5;
     var b = 6;
     ...
     var foo = function() { return a + b; }
/* 
и прямо здесь, допустим мы хотим подключить внешний скрипт который бы имел доступ к переменным a, b (и даже мог вызывать foo) точно так же как и foo;
тоесть подключаем его как то так:
*/
     loadScript(outerScript.js);
}();

и имеем внешний скрипт outerScript.js
/* 
в котором должен идти только тот код, который делает что то с перенными и функциями главной функции из main.js 
например:
*/
var c = foo();
var bar = function () { alert(c); }
bar(); // и получаем 11

как это реализовать???

ksa 26.08.2013 15:26

Цитата:

Сообщение от Arramis
Собственно, рассуждая логически, внешний скрипт нужно загружать непосредственно внутри функции текущего скрипта

Так "логически" рассуждая можно много чего еще понапридумывать... :D
Только вот на практике не сделать...

Цитата:

Сообщение от Arramis
как это реализовать?

Встречный вопрос:
- Какие варианты подгрузки внешнего скрипта ты знаешь?

Arramis 26.08.2013 15:48

Цитата:

Сообщение от ksa (Сообщение 269370)
Только вот на практике не сделать...

почему не сделать ?? что если кол - во строк в одном файле уже под 300 ?? как обычно поступаютв таких случаях ?
Цитата:

Сообщение от ksa (Сообщение 269370)
Встречный вопрос:
- Какие варианты подгрузки внешнего скрипта ты знаешь?

статический - тоесть когда динамически создаем тег скрипт и appendChild ом вставляем его в head.
и динамический - но тут уже с помощью xmlHttpRequest(); отправляем запрос серверу и получает код внешнего скрипта из responseText;
собственно попробывал второй вариант - не вышло, даже eval(responseText) не помог (

ksa 26.08.2013 16:06

Цитата:

Сообщение от Arramis
почему не сделать ?

Делай... :D

Цитата:

Сообщение от Arramis
создаем тег скрипт и appendChild ом вставляем его в head

И как такое запихать внутрь твоей функции?

Цитата:

Сообщение от Arramis
отправляем запрос серверу и получает код внешнего скрипта из responseText

Ну это даже не код... Просто текст.

Цитата:

Сообщение от Arramis
попробывал второй вариант - не вышло, даже eval(responseText) не помог (

А все было так логично! Правда? :D

Цитата:

Сообщение от Arramis
что если кол - во строк в одном файле уже под 300 ?

Тут я должен испугаться? :)

Цитата:

Сообщение от Arramis
как обычно поступаютв таких случаях ?

Пока не совсем понятно в каких именно случаях...

Когда "кол - во строк в одном файле уже под 300"? Или есть еще какие-то комбинации случаев?

Arramis 26.08.2013 16:19

Цитата:

Сообщение от ksa (Сообщение 269380)
И как такое запихать внутрь твоей функции?

ну я это вобще сказал, а не применительно к примеру который первым постом.
Цитата:

Сообщение от ksa (Сообщение 269380)
Ну это даже не код... Просто текст.

чем тогда код от текста отличается ?
Цитата:

Сообщение от ksa (Сообщение 269380)
Пока не совсем понятно в каких именно случаях...

Когда "кол - во строк в одном файле уже под 300"? Или есть еще какие-то комбинации случаев?

случай один - это пример который я описал в самом первом посте - представь что в файле main.js не 5 строк а под 300 c такой же структурой кода.

Яростный Меч 26.08.2013 16:23

Цитата:

Сообщение от Arramis
с помощью xmlHttpRequest(); отправляем запрос серверу и получает код внешнего скрипта из responseText;
собственно попробывал второй вариант - не вышло, даже eval(responseText) не помог (

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

Хотя сам подход не очень правильный (кроме отдельных редких частных случаев). Я бы подумал о рефакторинге.

Arramis 26.08.2013 16:29

Цитата:

Сообщение от Яростный Меч (Сообщение 269387)
Я бы подумал о рефакторинге.

не понял про рефакторинг =)

Яростный Меч 26.08.2013 16:39

Ну в смысле, переделать внешний скрипт таким образом, чтобы его можно было подключить стандартно, через тег <script> (изначально присутствующий на странице либо добавленный динамически, не суть важно).

И этот скрипт создавал бы объект (или функцию), которые можно было бы вызвать с теми или иными параметрами.

ksa 26.08.2013 20:05

Цитата:

Сообщение от Arramis
чем тогда код от текста отличается ?

Сравнивай...

var val='alert("test");';
// и
alert("test");


Часовой пояс GMT +3, время: 15:41.