Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 05.01.2016, 15:31
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
а может лучше заменить объявление функции на функциональное выражение? (var main = function () {...} )
Лучше. Переиспользовать переменную разными сущностями - это хрень какая-то. Не надо злоупотреблять динамической типизацией.

Цитата:
onclick='main()()'
Тьфу, да, точно.

Цитата:
А как на другую кнопку повесить функцию stopMove() ? Как из main() вернуть 2 функции?
Вот ты и начал натыкаться на грабли переусложнения.
Я бы лучше сделал как-то так:
<script>
	var startMoving;
	var stopMoving;

	(function() {
		"use strict";

		var timer; //Зачем здесь сокращение?
		
		startMoving = function() {
			timer = setInterval(function moveButton() {
				var target = $("#startMovingButton");
				var offset = parseInt(target.css("margin-left")) + 1;
				target.css("margin-left", offset + "px");
			});
		}

		stopMoving = function() {
			clearInterval(timer);
		}
	})();
</script>

<button id="startMovingButton" onclick="startMoving();">Start moving</button>
<button id="stopMovingButton" onclick="stopMoving();">Stop moving</button>


А вообще-то для подобного рода инкапсуляции в JS существует система модулей - https://learn.javascript.ru/modules.

Последний раз редактировалось Erolast, 05.01.2016 в 15:33.
Ответить с цитированием
  #32 (permalink)  
Старый 05.01.2016, 18:24
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Сообщение от рони
Сообщение от Keramet Посмотреть сообщение
1) перед main = main() var нужен?
Нет
Мы не ставим var, чтобы main была глобальной переменной? Или для чего? Насколько я разобрался - вся "магия" в этой строке

Последний раз редактировалось Keramet, 05.01.2016 в 18:30.
Ответить с цитированием
  #33 (permalink)  
Старый 05.01.2016, 18:52
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Нет, var не ставится потому, что переменная с названием main и так уже объявлена с помощью function main(){}. Функции в JS - сущности первого класса и тоже хранятся через помещение в переменную.
Собственно, любая функция - это объект-инстанс класса Function, наследника класса Object и имеет все признаки обычного объекта:
var func = function(){};
console.log(func.constructor == Function); // true
console.log(func instanceof Object); //true

func.property = 10;
func.property++;
console.log(func.property); //11;


Что насчет присвоения в глобал с помощью опущения var - да, такой трюк раньше действительно был возможен, но начиная с ES5 он запрещен. В строгом режиме попытка обращения к необъявленной переменной сгенерирует ошибку.

Последний раз редактировалось Erolast, 05.01.2016 в 19:09.
Ответить с цитированием
  #34 (permalink)  
Старый 05.01.2016, 19:21
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Erolast,
Это я понял. Объясните мне, зачем в коде рони main = main()?
Ответить с цитированием
  #35 (permalink)  
Старый 05.01.2016, 19:56
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

main = main() - перезапись переменной main результатом вызова функции, находящейся (потом уже находившейся) в этой переменной.

Зачем? Нахрена-то)
Ответить с цитированием
  #36 (permalink)  
Старый 05.01.2016, 19:59
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Сообщение от Erolast Посмотреть сообщение
main = main() - перезапись переменной main результатом вызова функции, находящейся (потом уже находившейся) в этой переменной.

Зачем? Нахрена-то)

Спасибо за вразумительное объяснение ))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли передать переменую grid из одной функции в другую alexrzl ExtJS 1 16.11.2010 18:33
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
Можно ли использовать функции в качестве свойства абс_позиционируемого объекта Newgen Элементы интерфейса 1 27.07.2009 14:40
Замыкание - это... Zeroglif Общие вопросы Javascript 11 06.03.2009 22:04