Вынести функцию из функции
Я только начинаю немного понимать яваскрипт. Делаю свою маленькую игрульку, и что-то даже немного получается. Объем скрипта растет, и появилась необходимость раскинуть функции по отдельным файлам для удобства.
func1(); function func1(){ var A=1; func2(); func3(); function func2(){ A=2; alert('func2='+A); // 2 } function func3(){ alert('func3='+A); // 2 } } // --------------------------- func1x(); function func1x(){ var A=1; func2x(A); func3x(A); } function func2x(perem){ perem=2; alert('func2x='+perem); // 2 } function func3x(perem){ alert('func3x='+perem); // 1 } Как правильно из func1 достать из func2 и func3? Желательно даже без передачи A параметром (а то придется кучу переменных в массив для этого собирать). |
evgeniyfill82,
Так ты ж достал)) |
function func1x(){ var obj={A:1}; func2x(obj); func3x(obj); } function func2x(perem){ perem.A=2; alert('func2x='+perem.A); // 2 } function func3x(perem){ alert('func3x='+perem.A); // 2 } func1x(); function func1x(){ var A=1; A = func2x(A); A = func3x(A); } function func2x(perem){ perem=2; alert('func2x='+perem); // 2 return perem } function func3x(perem){ alert('func3x='+perem); // 2 return perem } func1x(); var FuncLib = { func1x: function (){ this.A=1; this.func2x(); this.func3x(); }, func2x: function(){ this.A = 2; alert('func2x='+this.A); // 2 }, func3x: function func3x(perem){ alert('func3x='+this.A); // 2 } } FuncLib.func1x(); Вот тебе три варианта: процедурный, функциональный и объектный.) |
Он не знает про scope, а вы ему ООП. Вот что он хочет.
(function(){ var /* все переменные для всех функций внутри безымянной функции */; function foo(){ /* доступны все */ } function bar(){ /* доступно всё */ } function baz(){ /* доступно всё */ } })(); Он же безусловно запускает свою func1() сейчас. |
Спасибо, Aetae, подошел первый вариант, работает как надо. Но я надеялся, что можно будет обойтись без переделки переменных в единый объект (их тыщи-тыщи). Что поделать :) буду знать на будущее.
Еще вот вопрос имеется. Количество передаваемых в функцию данных влияет на скорость выполнения скрипта? То есть, если по вашему примеру, в объект obj я соберу все и вся что есть в игре и может понадобиться (герои, враги, карты и т.д.) и буду передавать obj во все подряд функции, это может повлиять на скорость? |
Цитата:
Я же говорю, ему нужен просто scope для своей апликухи, а вы профессора его уводите с истинного пути. Не мучайте человека, скажите ему то же самое. ))) |
evgeniyfill82, нет, передаётся ссыка на объект, сам объект один, потому передавай сколько хошь.
P.S. То о чём говорит warren buffet: (function(){ var A; function func1x(){ A=1; func2x(); func3x(); } function func2x(){ A=2; alert('func2x='+A); // 2 } function func3x(){ alert('func3x='+A); // 2 } func1x(); }()) Только тут каждую переменную придётся объявлять отдельно, и если будут именно разные файлы, то это всё рано бессмысленно. |
Ясно. Спасибо.
Да, мне важно было именно разделить на разные файлы. А то пальчик устал колесико туда-сюда крутить, и в глазах рябит. Я еще надеялся сначала, что можно будет гетСкриптом подгрузить функции в какое надо место, вроде как инклюдом как пхп, но не работает так. |
Вообще по-хорошему, тебе нужны модули. Но это потребует специального сборщика и других заморочек, которые взорвут начинающему мозг.)
Однако в итоге, если дело дойдёт до серьёзной работы, то всё равно придётся с этим всем разбираться. Вот вроде смешной пост на эту тему, но смешной он до тех пор пока не понимаешь, что вся эта фигня действительно тебе нужна.) |
Aetae, ему нужна IDE чтобы колесико не крутить.
ТС, научись пользоваться хотя бы поиском в своем блокноте. |
Часовой пояс GMT +3, время: 05:16. |