Вынести функцию из функции
Я только начинаю немного понимать яваскрипт. Делаю свою маленькую игрульку, и что-то даже немного получается. Объем скрипта растет, и появилась необходимость раскинуть функции по отдельным файлам для удобства.
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, время: 15:01. |