Функция-обертка как альтернатива глобальным переменным
Всем привет.:) Вопрос такой. Можно ли использовать анонимную функцию-обертку, чтобы избежать объявления глобальных переменных? Я поместил в эту функцию абсолютно весь код. Раньше я использовал в своем коде глобальные переменные, но почитав в сети негативные отзывы о них, решил найти способ избежать их использование.
Дело в том, что в моем коде все функции пользуются общими переменными. Я пытался обернуть в эту функцию только часть кода, но тогда другие функции переставали работать. Даже передавал аргументы в вызываемую функцию, но увы. Пришлось оборачивать в обертку весь код. Другого выхода я не нашел. Вот код с глобальными переменными: var Data; var i = 0; var y = 0; function button(x) { if(x==1) { if(i!=y) { $('#here' + i).css("display", "none"); i++; $('#here' + i).css("display", "block"); } else { $('#here' + i).css("display", "none"); i++; y++; go(); $('#back').css("display", "inline-block"); } } else if(x==2){ if(i>0) { $('#here'+ i +',#send').css("display", "none"); i--; $('#here' + i).css("display", "block"); } else { return false; } } console.log("i="+i,"y="+y); } function sending() { var str = $("input:radio[class=server]").serialize(); str += "&test_id="+Data[0].id; $.get('save_data.php?'+str, function(data2){ if(data2) { console.log(data2); } }); } function go() { if(i > Data.length - 1) { $('#send').css("display", "inline-block"); y--; return false; } var row = ''; row = '<span class="test" id="here'+i+'">'; row += '<b>' + Data[i].questions + '</b><Br>'; var ss = Data[i].answers.split(','); for (var i2 = 0; i2<ss.length; i2++) { row += '<input type="radio" class="server" name="id_answer'+i+'" value="' + i2 + '">' + ss[i2] + '<Br>'; } row += '</span>' $('#load_test').prepend(row); } $(document).ready(function(){ $('a').live('click', function() { $('div#block3').css("display", "none"); var href = $(this).attr("id"); $.post('load_data.php', {drink: href}, function(data){ Data = data; if(data) { var fieldsCount = data.length; var row = ''; if(fieldsCount) { row = '<form id="load_test"><button onclick="button(1); return false;">Далее</button>'; row += '<button id="back" style="display: none" onclick="button(2); return false;">Назад</button>'; row += '<button id="send" style="display: none" onclick="sending(); return false;">Отправить</button></form>'; $('#feeds').html(row); go(); } } }, "json"); return false; }); }); А вот код с анонимной функцией оберткой: $(document).ready(function(){ (function(){ var Data; var i = 0; var y = 0; $('a').live('click', function() { $('div#block3').css("display", "none"); var href = $(this).attr("id"); alert(href); $.post('load_data.php', {drink: href}, function(data){ Data = data; if(data) { var fieldsCount = data.length; var row = ''; if(fieldsCount) { row = '<form id="load_test"><input id="forward" type="image" src="images/forward.png">'; row += '<input type="image" src="images/to_back.png" id="back" style="display: none">'; row += '<button id="send" style="display: none">Отправить</button></form>'; $('#feeds').html(row); go(); } } }, "json"); return false; }); $('#forward').live('click', function(){ if(i!=y) { $('#here' + i).css("display", "none"); i++; $('#here' + i).css("display", "block"); } else { $('#here' + i).css("display", "none"); i++; y++; go(); $('#back').css("display", "inline-block"); } console.log("i="+i,"y="+y); return false; }); $('#back').live('click', function(){ if(i>0) { $('#here'+ i +',#send').css("display", "none"); i--; $('#here' + i).css("display", "block"); } console.log("i="+i,"y="+y); return false; }); function go() { if(i > Data.length - 1) { $('#send').css("display", "inline-block"); y--; return false; } var row = ''; row = '<span class="test" id="here'+i+'">'; row += '<b>' + Data[i].questions + '</b><Br>'; var ss = Data[i].answers.split(','); for (var i2 = 0; i2<ss.length; i2++) { row += '<input type="radio" class="server" name="id_answer'+i+'" value="' + i2 + '">' + ss[i2] + '<Br>'; } row += '</span>' $('#load_test').prepend(row); } $('#send').live('click', function(){ var str = $("input:radio[class=server]").serialize(); str += "&test_id="+Data[0].id; $.get('save_data.php?'+str, function(data2){ if(data2) { console.log(data2); } }); }); })();//конец обертки }); Что скажете? Какой код лучше? И есть ли смысл вообще использовать обертку в моем случае? Спасибо.:) |
Dimaz,
Надо было добавить весь код в обертку: (function () { //твой код })();Но ты зачем-то вешаешь анонимную функцию на document.ready и в ней оборачиваешь. |
Цитата:
|
Dimaz,
Но если ты хочешь все вызвать на document.ready: $(document).ready(function(){ // это уже есть анонимная функция // тут код }); |
Часовой пояс GMT +3, время: 04:28. |