Просмотр полной версии : Помогите с функцией
Если делать как в примере ниже то переменная i обнуляется, а если не передавать ее аргументом то счетчик становится общей для всех вызовов функции, подскажите пожалуйста как сделать для каждого вызова свой счетчик?
i = 0
function calc(i, step){
i = i+step
console.log(i)
}
calc(i, 20)
calc(i, 30)
EmperioAf
04.11.2015, 11:46
https://learn.javascript.ru/closures#возврат-функции
Как ты себе это представляешь?
Я никак не представляю, вот и спросил, а EmperioAf вроде правильную ссылку дал.
ruslan_mart
04.11.2015, 12:37
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_xDD, подобные конструкции для меня еще неисследованная территория.
ruslan_mart
04.11.2015, 13:19
AntonMs, ничего сильно так иследовать не нужно, просто запомните это и лепите везде как стандартный шаблон. Со времени всё поймёте сами. :)
лепите везде как стандартный шаблон
Если не буду понимать несколько строк среди своего кода, то меня это будет мучать)
ruslan_mart
04.11.2015, 17:47
AntonMs, Объясню вкратце, мы создаём ф-цию, которая вызывает саму себя:
(function() {
})();
А внутри неё, все переменные локальны, т.е., глобал мы не засоряем, понятно?
Ruslan_xDD, понятно, но вроде не встречал ситуации где это нужно.
EmperioAf
04.11.2015, 20:31
но вроде не встречал ситуации где это нужно
допустим вы хотите написать библиотеку которой будут все пользоваться (например jQuery).
Тогда вы пишите:
;(function(parameters){
//создаём объект jQuery и вешаем на него все необходимые методы
return jQuery;
}();
ruslan_mart
05.11.2015, 07:49
Ruslan_xDD, понятно, но вроде не встречал ситуации где это нужно.
Потому что почти никто так делает, но так делать нужно.
Ruslan_xDD, понятно, но вроде не встречал ситуации где это нужно.
Чтобы имена переменных скрыть. На самом деле, это особо и не нужно, если не боишься конфликтов. Просто кто-то сделал когда-то, и все стали лепить где не попадя, как попугаи.
Есть, правда, еще небольшой профит. Переменные локальны -- лукапы будут быстрей, если глобальный объект будет сильно захламлен. Но это только если производительность очень сильно критична, экономия на спичках в чистом виде + "бонусом" получаем оверхед по памяти.
loljs, я тоже так думаю, но из-за неопытности - раньше казалось что причин так делать больше чем две)
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot