Функции имеют область видимости для своего текущего блока, и они поднимаются к вершине их текущего блока, в этом операторе if есть два блока if
if (!blah) {
function foo() { console.log('falsy') }
} else {
function foo() { console.log('truthy') }
}
Если вы отформатируете его таким образом, вы увидите два foos и их объем находится в скобках.
Точно так же, как привет ниже, терпит неудачу, поскольку он имеет только область видимости для блока, в котором он определен.
hello();
{
function hello() {
console.log('hello');
}
}
Для тех, кто сталкивается с той же проблемой: при использовании драгоценного камня RedCloth, можно просто определить собственный метод (в одном из помощников).
def safe_textilize( s ) if s && s.respond_to?(:to_s) doc = RedCloth.new( s.to_s ) doc.filter_html = true doc.to_html end end
Выборка из документации:
Средства доступа для установки ограничений безопасности.
Это - хорошая вещь при использовании RedCloth для форматирования в общественных местах (например, Wikis), где Вы не хотите, чтобы пользователи злоупотребили HTML для плохих вещей.
Если
filter_html
установлен, HTML, который не был создан процессором Textile, оставят. С другой стороны, еслиsanitize_html
установлен, HTML может пройти через процессор Textile, но несанкционированные теги и атрибуты будут удалены.
Похож на ткань, просто не поддерживает то, что Вы хотите.
Вы действительно хотите только позволить тщательно управляемое подмножество HTML, но ткань разработана для разрешения произвольного HTML. Я не думаю, что можно использовать ткань вообще в этой ситуации (если она не поддерживает такое ограничение).
То, в чем Вы нуждаетесь, является, вероятно, специальной "ограниченной" версией ткани, это только позволяет "безопасную" разметку (определяющий, который однако мог бы уже быть хитрым). Я не знаю, существует ли это, как бы то ни было.
Вы могли бы взглянуть на BBCode, который позволяет ограничивать возможную разметку.