Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.11.2015, 10:53
Аватар для AntonMs
Профессор
Отправить личное сообщение для AntonMs Посмотреть профиль Найти все сообщения от AntonMs
 
Регистрация: 25.01.2015
Сообщений: 163

Помогите с функцией
Если делать как в примере ниже то переменная i обнуляется, а если не передавать ее аргументом то счетчик становится общей для всех вызовов функции, подскажите пожалуйста как сделать для каждого вызова свой счетчик?
i = 0
function calc(i, step){
	i = i+step
	console.log(i)
}

calc(i, 20)
calc(i, 30)
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2015, 11:46
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

https://learn.javascript.ru/closures#возврат-функции
Ответить с цитированием
  #3 (permalink)  
Старый 04.11.2015, 12:30
Аватар для AntonMs
Профессор
Отправить личное сообщение для AntonMs Посмотреть профиль Найти все сообщения от AntonMs
 
Регистрация: 25.01.2015
Сообщений: 163

Сообщение от Rise
Как ты себе это представляешь?
Я никак не представляю, вот и спросил, а EmperioAf вроде правильную ссылку дал.
Ответить с цитированием
  #4 (permalink)  
Старый 04.11.2015, 12:37
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от AntonMs
i = 0
Запомните раз и навсегда, так переменные объявлять нельзя! Обязательно используйте ключевое слово var. И в глобальной области вообще ничего объявлять не нужно кроме классов.


function MyClass() { //Какой-то важный класс, который будет очень часто использоваться

};
MyClass.prototype.myMethod = function() {

};


(function() { //Тут весь нужный код
    
    var a, b, c, d, e, f;

    function myLocalFunc() { }
  
})();



А если важный класс использует какие-то переменные из вне, то лучше сделать так:

(function() {

     var foo = 'bar';

     window.MyClass = function() {
          alert(foo);
     };
     MyClass.prototype.myMethod = function() {


     };
})();

Последний раз редактировалось ruslan_mart, 04.11.2015 в 12:40.
Ответить с цитированием
  #5 (permalink)  
Старый 04.11.2015, 13:14
Аватар для AntonMs
Профессор
Отправить личное сообщение для AntonMs Посмотреть профиль Найти все сообщения от AntonMs
 
Регистрация: 25.01.2015
Сообщений: 163

Ruslan_xDD, подобные конструкции для меня еще неисследованная территория.
Ответить с цитированием
  #6 (permalink)  
Старый 04.11.2015, 13:19
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

AntonMs, ничего сильно так иследовать не нужно, просто запомните это и лепите везде как стандартный шаблон. Со времени всё поймёте сами.
Ответить с цитированием
  #7 (permalink)  
Старый 04.11.2015, 16:07
Аватар для AntonMs
Профессор
Отправить личное сообщение для AntonMs Посмотреть профиль Найти все сообщения от AntonMs
 
Регистрация: 25.01.2015
Сообщений: 163

Сообщение от Ruslan_xDD
лепите везде как стандартный шаблон
Если не буду понимать несколько строк среди своего кода, то меня это будет мучать)
Ответить с цитированием
  #8 (permalink)  
Старый 04.11.2015, 17:47
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

AntonMs, Объясню вкратце, мы создаём ф-цию, которая вызывает саму себя:

(function() {

})();


А внутри неё, все переменные локальны, т.е., глобал мы не засоряем, понятно?

Последний раз редактировалось ruslan_mart, 04.11.2015 в 18:28.
Ответить с цитированием
  #9 (permalink)  
Старый 04.11.2015, 19:39
Аватар для AntonMs
Профессор
Отправить личное сообщение для AntonMs Посмотреть профиль Найти все сообщения от AntonMs
 
Регистрация: 25.01.2015
Сообщений: 163

Ruslan_xDD, понятно, но вроде не встречал ситуации где это нужно.
Ответить с цитированием
  #10 (permalink)  
Старый 04.11.2015, 20:31
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от AntonMs
но вроде не встречал ситуации где это нужно
допустим вы хотите написать библиотеку которой будут все пользоваться (например jQuery).
Тогда вы пишите:
;(function(parameters){
  //создаём объект jQuery и вешаем на него все необходимые методы
  return jQuery;
}();
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с функцией! rutcod Общие вопросы Javascript 7 22.07.2015 14:06
Помогите разобраться с функцией SlideToggle mik3030 jQuery 8 12.07.2015 17:38
Помогите разобраться с функцией. zaetss Учебные материалы 3 13.05.2015 10:46
Помогите с функцией error ajax Evhen AJAX и COMET 2 13.12.2013 11:17
Помогите с Функцией lublupospat AJAX и COMET 4 18.03.2012 19:42