Показать сообщение отдельно
  #1 (permalink)  
Старый 11.12.2012, 18:30
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Функция-обертка как альтернатива глобальным переменным
Всем привет. Вопрос такой. Можно ли использовать анонимную функцию-обертку, чтобы избежать объявления глобальных переменных? Я поместил в эту функцию абсолютно весь код. Раньше я использовал в своем коде глобальные переменные, но почитав в сети негативные отзывы о них, решил найти способ избежать их использование.
Дело в том, что в моем коде все функции пользуются общими переменными. Я пытался обернуть в эту функцию только часть кода, но тогда другие функции переставали работать. Даже передавал аргументы в вызываемую функцию, но увы. Пришлось оборачивать в обертку весь код. Другого выхода я не нашел. Вот код с глобальными переменными:
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);
}
});
});

})();//конец обертки
});

Что скажете? Какой код лучше? И есть ли смысл вообще использовать обертку в моем случае? Спасибо.
Ответить с цитированием