2016-06-09 4 views
0

Так что я пытался установить значение для переменной, когда пользователь вводит что-то в чате, который находится в списке linksDisallowed. Однако я не могу получить значение переменных вне оператора if. Кто-нибудь может помочь мне?Задайте значение переменной внутри оператора if. И использовать его вне сателлита потом

Код выглядит следующим образом:

client.on('chat', function(channel, user, message, self) { 
 
\t for (var i = 0; i < 3; i++) { 
 
\t \t 
 
\t \t if(message.indexOf(linksDisallowed[i]) >= 0) { 
 
\t \t \t var timeoutUser = 1; 
 
\t \t \t //console.log("Link detected!"); 
 
\t \t \t //client.say("dunkstormen", "Ahem! " + user.username + " are you allowed to post links?!"); 
 
\t \t } else { 
 
\t \t \t var timeoutUser = 0; 
 
\t \t \t //console.log("No link detected!"); 
 
\t \t \t //client.say("dunkstormen", "Hello, " + user.username); 
 
\t \t } 
 
\t \t 
 
\t } 
 
\t 
 
\t if(timeoutUser == 1) { 
 
\t \t console.log("Timing out " + user.username); 
 
\t } else { 
 
\t \t timeoutUser == 0 
 
\t \t console.log("Not timing out " + user.username); 
 
\t } 
 
});

+0

Если вы определяете переменную 'var' она будет доступна внутри целая функция (функция scope). Поэтому у вас есть доступ к 'timeoutUser' после' if' и 'for'. Здесь должна быть какая-то другая ошибка. –

+2

Вы устанавливаете значение переменной в цикле, поэтому после цикла он будет удерживать любое значение, установленное в последней итерации. Таким образом, вы действительно проверяете третье недопустимое значение ссылки. Возможно, вы хотите, чтобы оператор 'break' в вашем' if' вышел из цикла, как только вы получили совпадение? (Если это так, установите переменную в 0 перед циклом и удалите случай else.) – nnnnnn

ответ

1

Код, который вы показали, должен работать, потому что это не имеет значения, где в функции вар определяется, что это нормально, как декларация вара являются и переменная привязана к уровню функции, а не к уровню блока.

Что-то еще вызывает вашу проблему, а не объявление переменной.

Что вы можете сделать, чтобы сделать код более удобным для чтения, чтобы объявить переменную сразу при входе в функцию:

client.on('chat', function(channel, user, message, self) { 
    var timeoutUser; 
    for (var i = 0; i < 3; i++) { 

     if(message.indexOf(linksDisallowed[i]) >= 0) { 
      timeoutUser = 1; 
      //console.log("Link detected!"); 
      //client.say("dunkstormen", "Ahem! " + user.username + " are you allowed to post links?!"); 
     } else { 
      timeoutUser = 0; 
      //console.log("No link detected!"); 
      //client.say("dunkstormen", "Hello, " + user.username); 
     } 

    } 

    if(timeoutUser == 1) { 
     console.log("Timing out " + user.username); 
    } else { 
     timeoutUser == 0 
     console.log("Not timing out " + user.username); 
    } 
}); 
+1

Обнаружено, что я забыл разбить цикл for, когда обнаружил ссылку. Таким образом, он продолжит проверку других строк в моем массиве, а затем вернет timeoutUser обратно 0. – Dunkstormen

-1
client.on('chat', function(channel, user, message, self) { 
    var timeoutUser = 0; 

    for (var i = 0; i < 3; i++) { 
     if(message.indexOf(linksDisallowed[i]) >= 0) { 
      timeoutUser = 1; 
      // console.log("Link detected!"); 
      // client.say("dunkstormen", "Ahem! " + user.username + " are you allowed to post links?!"); 
     } else {    
      // console.log("No link detected!"); 
      // client.say("dunkstormen", "Hello, " + user.username); 
     } 

    } 

    if(timeoutUser == 1) { 
     console.log("Timing out " + user.username); 
    } else { 
     console.log("Not timing out " + user.username); 
    } 
}); 
+0

Вы просто размещаете код и не отвечаете на вопрос. В результате изменения, внесенного вами в исходный код, можно предположить, что вы его исправили и что это было неправильно раньше. Однако вы только изменили код, который не влияет на вывод. Вам нужно описать, какова была ваша цель. –

+0

Я изменил местоположение переменной, если вы внимательно смотрите. –

+0

Перемещение оператора 'var' в другое место в той же функции не поможет, потому что переменные, созданные с помощью' var', уже имеют область действия, * не * область блока. – nnnnnn