26.09.2016, 21:54
|
Интересующийся
|
|
Регистрация: 26.09.2016
Сообщений: 13
|
|
Вынести функцию из функции
Я только начинаю немного понимать яваскрипт. Делаю свою маленькую игрульку, и что-то даже немного получается. Объем скрипта растет, и появилась необходимость раскинуть функции по отдельным файлам для удобства.
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 параметром (а то придется кучу переменных в массив для этого собирать).
|
|
26.09.2016, 23:57
|
|
Профессор
|
|
Регистрация: 21.11.2015
Сообщений: 440
|
|
evgeniyfill82,
Так ты ж достал))
|
|
27.09.2016, 01:56
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,565
|
|
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();
Вот тебе три варианта: процедурный, функциональный и объектный.)
__________________
29375, 35
|
|
27.09.2016, 04:59
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Он не знает про scope, а вы ему ООП. Вот что он хочет.
(function(){
var /* все переменные для всех функций внутри безымянной функции */;
function foo(){
/* доступны все */
}
function bar(){
/* доступно всё */
}
function baz(){
/* доступно всё */
}
})();
Он же безусловно запускает свою func1() сейчас.
|
|
27.09.2016, 18:13
|
Интересующийся
|
|
Регистрация: 26.09.2016
Сообщений: 13
|
|
Спасибо, Aetae, подошел первый вариант, работает как надо. Но я надеялся, что можно будет обойтись без переделки переменных в единый объект (их тыщи-тыщи). Что поделать буду знать на будущее.
Еще вот вопрос имеется. Количество передаваемых в функцию данных влияет на скорость выполнения скрипта? То есть, если по вашему примеру, в объект obj я соберу все и вся что есть в игре и может понадобиться (герои, враги, карты и т.д.) и буду передавать obj во все подряд функции, это может повлиять на скорость?
|
|
27.09.2016, 20:42
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от evgeniyfill82
|
и буду передавать obj во все подряд функции
|
Я же говорю, ему нужен просто scope для своей апликухи, а вы профессора его уводите с истинного пути. Не мучайте человека, скажите ему то же самое. )))
|
|
27.09.2016, 23:07
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,565
|
|
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();
}())
Только тут каждую переменную придётся объявлять отдельно, и если будут именно разные файлы, то это всё рано бессмысленно.
__________________
29375, 35
|
|
28.09.2016, 00:03
|
Интересующийся
|
|
Регистрация: 26.09.2016
Сообщений: 13
|
|
Ясно. Спасибо.
Да, мне важно было именно разделить на разные файлы. А то пальчик устал колесико туда-сюда крутить, и в глазах рябит.
Я еще надеялся сначала, что можно будет гетСкриптом подгрузить функции в какое надо место, вроде как инклюдом как пхп, но не работает так.
|
|
28.09.2016, 00:57
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,565
|
|
Вообще по-хорошему, тебе нужны модули. Но это потребует специального сборщика и других заморочек, которые взорвут начинающему мозг.)
Однако в итоге, если дело дойдёт до серьёзной работы, то всё равно придётся с этим всем разбираться. Вот вроде смешной пост на эту тему, но смешной он до тех пор пока не понимаешь, что вся эта фигня действительно тебе нужна.)
__________________
29375, 35
|
|
28.09.2016, 09:45
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Aetae, ему нужна IDE чтобы колесико не крутить.
ТС, научись пользоваться хотя бы поиском в своем блокноте.
|
|
|
|