Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2016, 21:54
Интересующийся
Отправить личное сообщение для evgeniyfill82 Посмотреть профиль Найти все сообщения от evgeniyfill82
 
Регистрация: 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 параметром (а то придется кучу переменных в массив для этого собирать).
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2016, 23:57
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

evgeniyfill82,
Так ты ж достал))
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2016, 01:56
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

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
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2016, 04:59
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Он не знает про scope, а вы ему ООП. Вот что он хочет.

(function(){

   var /* все переменные для всех функций внутри безымянной функции */;

   function foo(){
      /* доступны все */
   }

   function bar(){
      /* доступно всё */
   }

   function baz(){
      /* доступно всё */
   }

})();


Он же безусловно запускает свою func1() сейчас.
Ответить с цитированием
  #5 (permalink)  
Старый 27.09.2016, 18:13
Интересующийся
Отправить личное сообщение для evgeniyfill82 Посмотреть профиль Найти все сообщения от evgeniyfill82
 
Регистрация: 26.09.2016
Сообщений: 13

Спасибо, Aetae, подошел первый вариант, работает как надо. Но я надеялся, что можно будет обойтись без переделки переменных в единый объект (их тыщи-тыщи). Что поделать буду знать на будущее.

Еще вот вопрос имеется. Количество передаваемых в функцию данных влияет на скорость выполнения скрипта? То есть, если по вашему примеру, в объект obj я соберу все и вся что есть в игре и может понадобиться (герои, враги, карты и т.д.) и буду передавать obj во все подряд функции, это может повлиять на скорость?
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2016, 20:42
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от evgeniyfill82
и буду передавать obj во все подряд функции

Я же говорю, ему нужен просто scope для своей апликухи, а вы профессора его уводите с истинного пути. Не мучайте человека, скажите ему то же самое. )))
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2016, 23:07
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

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
Ответить с цитированием
  #8 (permalink)  
Старый 28.09.2016, 00:03
Интересующийся
Отправить личное сообщение для evgeniyfill82 Посмотреть профиль Найти все сообщения от evgeniyfill82
 
Регистрация: 26.09.2016
Сообщений: 13

Ясно. Спасибо.
Да, мне важно было именно разделить на разные файлы. А то пальчик устал колесико туда-сюда крутить, и в глазах рябит.
Я еще надеялся сначала, что можно будет гетСкриптом подгрузить функции в какое надо место, вроде как инклюдом как пхп, но не работает так.
Ответить с цитированием
  #9 (permalink)  
Старый 28.09.2016, 00:57
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Вообще по-хорошему, тебе нужны модули. Но это потребует специального сборщика и других заморочек, которые взорвут начинающему мозг.)

Однако в итоге, если дело дойдёт до серьёзной работы, то всё равно придётся с этим всем разбираться. Вот вроде смешной пост на эту тему, но смешной он до тех пор пока не понимаешь, что вся эта фигня действительно тебе нужна.)
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 28.09.2016, 09:45
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Aetae, ему нужна IDE чтобы колесико не крутить.

ТС, научись пользоваться хотя бы поиском в своем блокноте.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача аргументом функции функцию Brainsss Общие вопросы Javascript 20 17.11.2014 16:12
вынести событие в функцию And5 jQuery 3 18.05.2014 19:07
Передача значения из функции в функцию wine-time Общие вопросы Javascript 4 18.09.2011 17:39
Как привратить имя функции в саму функцию webmakaka Общие вопросы Javascript 2 15.09.2011 16:23
Помогите вынести обработчик события в функцию. prowoke Events/DOM/Window 3 25.03.2011 00:55